///****************************************************************************************
// * ļ: kf8sp_lib_touch.c
// *  :   V2.0
// *  :   2015-5-30
// *  :  Ϻо΢Ӽ޹˾
// * ˵    ݴ⺯ļ
// *
// ****************************************************************************************/
#include "kf8spsw_lib_touch.h"		//봥⺯


#define  Ver_SP_T_W   0xF2

typedef struct{
	unsigned char _bit0_:1;
	unsigned char _bit1_:1;
	unsigned char _bit2_:1;
	unsigned char _bit3_:1;
	unsigned char _bit4_:1;
	unsigned char _bit5_:1;
	unsigned char _bit6_:1;
	unsigned char _bit7_:1;
}Touch_Bits_TYPE;

//궨˲
#define IIR_SET     		3		//  8 趨 3  16趨4   4趨2
#define IIR_SET_REPAIR     	4		//  8 趨4   16趨8  4趨2
//ĲݷΧһһݾȶʧ,ֵֻ100ôȾǾ2%
//ݱȽϴ˲ֵѡҪСֵºֵ700ϼѣСڵĻ
//ʧأʱ趨˲Ϊ8ȶʧ1%16ʱȶʧҲ1%¡ѡ32߸
//ȻžȵĶʧݹС˲Ⱦǻű仯ʵļȶʧ߼д


//־壬λṹ
volatile static Touch_Bits_TYPE _KF8_Touch_Bits_;
#define _KF8_Touch_Work_Flag	 			_bit0_ //ʼ׼׶α
#define _KF8_Touch_Protect_Flag	 			_bit1_ //쳣׶α־
#define _KF8_Touch_Sign_Flag	 			_bit2_ // ־
#define _KF8_Touch_Need_Save_Flag		 	_bit3_ // ʼдEEοжϽ
#define _KF8_Touch_Work_USE_PWM		 		_bit4_	// PWMʹõE03汾15λ
#define _KF8_Touch_Work_PWM_IS_16bit	 	_bit5_	// PWMʹõE05汾16λ
#define _KF8_Touch_Start_EE_OK_Flag			_bit6_
#define _KF8_Touch_Start_no7	 			_bit7_
// ǧֱ仯òյķ˼仯ʿܴܺ󣬵
// ѭĻЧʲߣõóķòʧЧǻǰյμ
#define _Define_Max_BaiHuanLv_Get_  1000

//ڼ仯ʵĻ棬
volatile signed int _KF8_lib_bahualvtemportemp_SW_;
// ѭ   255
volatile unsigned char  ii_buf_SW_;			// ѭ
volatile unsigned char  Date_Save_Buf_SW_;	// Ҫַƫ
volatile unsigned char  _KF8_lib_Date_Uchar_Temp_SW_; // 尴±־ʱĻַƫ

//ɱõintݣڿǰƽֵ׼ߣתµĲֵ
volatile unsigned int  _KF8_LIBi_Touch_New_Date_SW_;	// IIR˲мȽϴС
volatile signed 	int 	change_buf_SW_;	// 仯ʶ𲨶

////ʵͨɨ˳Ϳã־ȻCT15-CT0Խ־
unsigned int const _KF8_LIBt_buff_bit_SW_[16]={
							0x0001,	0x0002,	0X0004,0X0008,
							0X0010,	0X0020,	0X0040,0X0080,
							0X0100,	0x0200,	0x0400,0x0800,
							0x1000,	0x2000,	0x4000,0x8000,
							};   //λͼ
volatile unsigned int _KF8_Temp_Cur_A_SW_;
volatile unsigned int _KF8_Temp_Cur_B_SW_; // ݱ仯ʼãжϴγͻ
//=================ΪʹõԴ==================================//

volatile unsigned int eeprom_data_SW_;		// ֵ

// ʹ֧9ͨ
volatile unsigned char Arr_erom_SW_[24];	// S1025
volatile unsigned char Arr_erom_SW_Check[24];

volatile unsigned char oscctlbuf_SW_;
volatile unsigned char intctlbuf_SW_;

static void _R2PCHPCL_SW_()
{
	__asm
	MOV PCH,R1
	MOV PCL,R0
	__endasm;
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$BEE$$$$$$$$$$$$$$$$$$$$$$$//
// дٴζУȶԣ½־
static void read_data_eep_tsw_check()
{
//===========ݲַ======================
	__asm
		MOV	     R0,#0X0F				 ;BLOCK EEPROM׵ַΪ  	// 0x0FC0
		MOV	     BADDRH,R0				 ;
		MOV	     R0,#0XC0				 ;
		MOV	     BADDRL,R0				 ;
		NOP
		MOV R2 , #_Arr_erom_SW_Check
	__endasm;
//=============޶==================
	__asm
		MOV R1,#high(_CHS_AMOUNT+0)
		MOV R0,#low(_CHS_AMOUNT+0)
		PAGESEL __R2PCHPCL_SW_
		CALL __R2PCHPCL_SW_
		PAGESEL $
		MOV R5,R0	;// ȡѭʹR5
		MOV R4,R0	;// УѭʹR4
	__endasm;
//------------ѭ봦------------------//
	__asm
	DO_CHECK_IN_READ:
		MOV R0,#0x81
		MOV _EECTL1,R0
		.DW 0XFFFF
		.DW 0XFFFF

		MOV R0,R6
		BANKSEL _Arr_erom_SW_Check              //Ϊ˷ֹԪزһ
		ST [R2] , R0

		INC	R2
		MOV R0,R7
		BANKSEL _Arr_erom_SW_Check               //Ϊ˷ֹԪزһ
		ST [R2] , R0

		INC R2
		INC _BADDRL

		DECJZ R5
		JMP DO_CHECK_IN_READ
	__endasm;
//------------ѭУ鴦------------------//
		__asm
		MOV R2,#_Arr_erom_SW_
		MOV R3,#_Arr_erom_SW_Check

		DO_CHECK_IN_CHECK:
			BANKSEL _Arr_erom_SW_Check
			MOV R1 ,R3
			LD	R0,[R1]
			MOV R5,R0
			BANKSEL _Arr_erom_SW_
			MOV R1,R2
			LD	R0,[R1]
			XOR R0,R5
			JNB PSW,2
			JMP  DO_CHECK_High
			BANKSEL __KF8_Touch_Bits_
			CLR __KF8_Touch_Bits_,6		;;//λȵʧ־
		DO_CHECK_High:
			INC R2
			INC R3
			BANKSEL _Arr_erom_SW_Check
			MOV R1 ,R3
			LD	R0,[R1]
			MOV R5,R0
			BANKSEL _Arr_erom_SW_
			MOV R1,R2
			LD	R0,[R1]
			XOR R0,R5
			JNB PSW,2
			JMP  DO_CHECK_NEXT
			BANKSEL __KF8_Touch_Bits_
			CLR __KF8_Touch_Bits_,6		;;//λȵʧ ־
			;;/////
		DO_CHECK_NEXT:
			INC R2
			INC R3
			DECJZ R4
			JMP DO_CHECK_IN_CHECK
		__endasm;
//=============================
}
// ͨĶ
void read_data_eep_tsw_()
{
	unsigned char i;
	intctlbuf_SW_=INTCTL;
	oscctlbuf_SW_=OSCCTL;
	__asm
	CLR _INTCTL,6
	CLR _INTCTL, 7
	JNB _INTCTL, 7
	JMP $-2
//===================================

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~׷У鲿
READ_EE_DO_DS_001:
	BANKSEL __KF8_Touch_Bits_
	SET	__KF8_Touch_Bits_,6	// OK־ȴУ麯±־
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~׷У鲿

	;;// ַ趨
    MOV	     R0,#0X0F				 ;BLOCK EEPROM׵ַΪ
	MOV	     BADDRH,R0				 ;
	MOV	     R0,#0XC0				 ;
	MOV	     BADDRL,R0				 ;
	NOP
	;;// ݷλ
	MOV R2 , #_Arr_erom_SW_
	__endasm;
	//===================================
	OSCCTL=0x20;
	_NOP_();
	_NOP_();
//===================================
	for(i=0;i<CHS_AMOUNT;i++)
	{
		__asm
		MOV R0,#0x81
		MOV _EECTL1,R0
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF

		MOV R0,R6
		BANKSEL _Arr_erom_SW_              //Ϊ˷ֹArr_erom2еԪزһ
		ST [R2] , R0
		INC	R2

		MOV R0,R7
		BANKSEL _Arr_erom_SW_               //Ϊ˷ֹArr_erom2еԪزһ
		ST [R2] , R0		         //R7дݸλ
		INC R2

		INC _BADDRL
		__endasm;
	}
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~׷У鲿
	read_data_eep_tsw_check();
	__asm
		BANKSEL __KF8_Touch_Bits_
		JB __KF8_Touch_Bits_,6		;;//READ_EE_DO_DS_001
		JMP READ_EE_DO_DS_001
	__endasm;
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~׷У鲿ֽ
//=============================
	OSCCTL = oscctlbuf_SW_;
	_NOP();
	intctlbuf_SW_&=0xC0;
	INTCTL|=intctlbuf_SW_;
}
// 12ͨд
void write_eep_tsw_()
{
	unsigned char i;

	intctlbuf_SW_=INTCTL;
	oscctlbuf_SW_=OSCCTL;
	__asm
	CLR _INTCTL , _AIE           //жϣֹжϴEEP
	CLR _INTCTL ,_PUIE
	JNB _INTCTL , _AIE
	JMP $-2

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~׷У鲿
WRITE_EE_DO_DS_001:
	BANKSEL __KF8_Touch_Bits_
	SET	__KF8_Touch_Bits_,6	// OK־ȴУ麯±־
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~׷У鲿

	MOV R0 , #0x0F
	MOV _BADDRH , R0				  //дַλ
	MOV R0 , #0xC0
	MOV _BADDRL , R0				  //дַλ

	MOV R2 , #_Arr_erom_SW_		      //׵ַ͵R0   λڵλ λڸλԳ
	 __endasm;
	OSCCTL = 0x20;
	_NOP();
	_NOP();
	// ȷͨдҪÿ4̶֣Ϊ12ֻͨὫǰǰ治д룬ݣӰʹ
	for(i=0;i<12;i++)
	{
		__asm
		BANKSEL _Arr_erom_SW_        //Ϊ˷ֹArr_erom2еԪزһ
		LD R0 , [ R2 ]
		MOV R6,R0
		INC	R2
		BANKSEL _Arr_erom_SW_
		LD R0 , [ R2 ]
		INC R2				         //ָһ
		MOV R7,R0
	    /****д뺯****/

		MOV R5 , #0x84               //R5Cбжռãڲ֮ǰرжϿԽR5Ĳ
		MOV _EECTL1 , R5
		MOV R5 , #0x69
		MOV _EECTL2 , R5
		MOV R5 , #0x96
		MOV _EECTL2 , R5
		SET _EECTL1 , 1
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		.DW 0XFFFF
		MOV R5 , #0X80		         //رBLOCK EEдֹд
		MOV _EECTL1,R5
		INC _BADDRL			         //ַָһ
	    __endasm;
	}
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~׷У鲿
	read_data_eep_tsw_check();
	__asm
		BANKSEL __KF8_Touch_Bits_
		JB __KF8_Touch_Bits_,6		;;//READ_EE_DO_DS_001
		JMP WRITE_EE_DO_DS_001
	__endasm;
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~׷У鲿ֽ
	OSCCTL = oscctlbuf_SW_;
	_NOP();
	intctlbuf_SW_&=0xC0;
	INTCTL|=intctlbuf_SW_;
}
///******************************************************************************
//*   : void _KF8spsw_Lib_Get_MCU_Parameter()
//* :
//* ڲ: 0 򲻵  ͣʹT1H T1L  1 ʹT1U T3L15E03  2T1UT3L16E05  3Ԥ  4Ԥ
//*     : ̷֧
//******************************************************************************/
void _KF8spsw_Lib_SET_MCU_Parameter(unsigned char parameterin)
{
	switch(parameterin)
	{
		case 0:
		{
			_KF8_Touch_Bits_._KF8_Touch_Work_USE_PWM=0;
			_KF8_Touch_Bits_._KF8_Touch_Work_PWM_IS_16bit=0;
		}break;
		case 1:
		{
			_KF8_Touch_Bits_._KF8_Touch_Work_USE_PWM=1;
			_KF8_Touch_Bits_._KF8_Touch_Work_PWM_IS_16bit=0;
		}break;
		case 2:
		{
			_KF8_Touch_Bits_._KF8_Touch_Work_USE_PWM=1;
			_KF8_Touch_Bits_._KF8_Touch_Work_PWM_IS_16bit=1;
		}break;
		default:
		{
			break;
		}
	}
}
///******************************************************************************
//*   : void _KF8sptsw_lib_BaseLine_Reget_()
//* :
//* ڲ: οı仯ʣԭʼο
//*     : Ļ׼߸
//******************************************************************************/
void  _KF8spsw_Lib_BaseLine_Reget_()
{
#if 1
	//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	__asm
		BANKSEL _ii_buf_SW_
		CLR _ii_buf_SW_
		;;-----------------------------
	FOR_NEXT_DO_IN_Scan_1:
		MOV R1,# high (_CHS_AMOUNT+0)
		MOV R0,# low (_CHS_AMOUNT+0)
		PAGESEL	__R2PCHPCL_SW_
		CALL	__R2PCHPCL_SW_
		PAGESEL	$
		BANKSEL _ii_buf_SW_
		MOV R1,_ii_buf_SW_
		SUB R0,R1	;//ȥǰŵǰ
		JNB PSW,0   ;//ii_buf_SW_-CHS_AMOUNT λ     ii_buf_SW_<CHS_AMOUNT
		JMP FOR_NEXT_DO_IN_Scan_End
		;;-----------------------------
	__endasm;
//	for(ii_buf_SW_=0;ii_buf_SW_<CHS_AMOUNT;ii_buf_SW_++)
	{
		__asm
		//================================================
		 MOV R1,# high (__KF8_Inside_Reference_Channel_Order+0)
		 MOV R0,# low (__KF8_Inside_Reference_Channel_Order+0)
		 PAGESEL	__R2PCHPCL_SW_
		 CALL	__R2PCHPCL_SW_
		 PAGESEL	$
		 BANKSEL _ii_buf_SW_
		 XOR R0,_ii_buf_SW_
		 JNB PSW,2
		 JMP FOR_DO_IN_Scan_End
		__endasm;
		//if(ii_buf_SW_!=_KF8_Inside_Reference_Channel_Order)
		{
		//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
		#if 0
			_KF8_Temp_Cur_B_SW_=_KF8_LIBi_buff_refline_[ii_buf_SW_];
			_KF8_Temp_Cur_B_SW_=_KF8_Temp_Cur_B_SW_/64;
		#else
		__asm
			;;------------------------------------
			 CLR PSW,0
			 RLCR _ii_buf_SW_
			 BANKSEL _Date_Save_Buf_SW_
			 MOV  _Date_Save_Buf_SW_,R0	;//ƫ
			;;-------------------------------------
			 ADD R0,#(__KF8_LIBi_buff_refline_)
			 BANKSEL __KF8_LIBi_buff_refline_
			 LD R1,[R0]
			 BANKSEL    __KF8_Temp_Cur_B_SW_
			 MOV __KF8_Temp_Cur_B_SW_,R1
			 INC R0
			 BANKSEL __KF8_LIBi_buff_refline_
			 LD R1,[R0]
			 BANKSEL    __KF8_Temp_Cur_B_SW_
			 MOV (__KF8_Temp_Cur_B_SW_+1),R1	;;//_KF8_Temp_Cur_B_SW_=_KF8_LIBi_buff_refline_[ii_buf_SW_];
			;;------------------------------------
			 MOV R0,#0x20
			 ADD __KF8_Temp_Cur_B_SW_,R0
			 JB PSW,0
			 INC __KF8_Temp_Cur_B_SW_+1;	//

			 MOV R0,#0x06				;//6ʵֳ64Ĳ
			 INC R0
			 JMP DIV_64_Get_B_IN_Scan_001
		 DIV_64_Get_B_IN_Scan_002:
			 CLR PSW,0
			 RRC __KF8_Temp_Cur_B_SW_+1
			 RRC __KF8_Temp_Cur_B_SW_
		 DIV_64_Get_B_IN_Scan_001:
			 DECJZ R0
			 JMP DIV_64_Get_B_IN_Scan_002				;;//_KF8_Temp_Cur_B_SW_=_KF8_Temp_Cur_B_SW_/64;
		__endasm;
		#endif
			//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
		#if 0
			if(_KF8_lib_bahualvtemportemp_SW_<0)
			{
				_KF8_Temp_Cur_A_SW_=_KF8_lib_bahualvtemportemp_SW_*(-1);
				_KF8_Touch_Bits_._KF8_Touch_Sign_Flag=1;
			}
			else
			{
				_KF8_Temp_Cur_A_SW_=_KF8_lib_bahualvtemportemp_SW_;
				_KF8_Touch_Bits_._KF8_Touch_Sign_Flag=0;
			}
		#else
			__asm
			 ;;----------------------------------
			 BANKSEL __KF8_Touch_Bits_
			 CLR  __KF8_Touch_Bits_,2	;;//_KF8_Touch_Sign_Flag  bit 2
			 BANKSEL __KF8_lib_bahualvtemportemp_SW_
			 MOV R0,__KF8_lib_bahualvtemportemp_SW_
			 MOV R1,__KF8_lib_bahualvtemportemp_SW_+1
			 BANKSEL __KF8_Temp_Cur_A_SW_
			 MOV  __KF8_Temp_Cur_A_SW_,R0
			 MOV  __KF8_Temp_Cur_A_SW_+1,R1
			 BANKSEL __KF8_lib_bahualvtemportemp_SW_
			 JB __KF8_lib_bahualvtemportemp_SW_+1,7
			 JMP ABS_GET_DO_END_IN_Scan_1
			 ;;							//if(_KF8_lib_bahualvtemportemp_SW_<0) __KF8_Temp_Cur_A_SW_*(-1)
			 BANKSEL __KF8_Touch_Bits_
			 SET  __KF8_Touch_Bits_,2	;;//_KF8_Touch_Sign_Flag  bit 2
			 BANKSEL __KF8_Temp_Cur_A_SW_
			 CPL __KF8_Temp_Cur_A_SW_+1
			 CPL __KF8_Temp_Cur_A_SW_
			 INC __KF8_Temp_Cur_A_SW_
			 JNB PSW,2
			 INC __KF8_Temp_Cur_A_SW_+1
			 ;----------------------------------
		 ABS_GET_DO_END_IN_Scan_1:
		 __endasm;
		 if(1);
		#endif
			//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

			_KF8_Temp_Cur_B_SW_*=_KF8_Temp_Cur_A_SW_;
			//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
			#if 0
			_KF8_Temp_Cur_B_SW_/=16;
			#else
			__asm
					BANKSEL __KF8_Temp_Cur_B_SW_
					MOV R0,#0x08
					ADD __KF8_Temp_Cur_B_SW_,R0 	;//
					JNB PSW,0
					INC __KF8_Temp_Cur_B_SW_+1

					MOV R0,#0x04
					INC R0
					JMP Get_Base_DIV_16_DO_IN_Scan_1
				Get_Base_DIV_16_DO_IN_Scan_2:
					CLR PSW,0
					RRC __KF8_Temp_Cur_B_SW_+1
					RRC __KF8_Temp_Cur_B_SW_
				Get_Base_DIV_16_DO_IN_Scan_1:
					DECJZ R0
					JMP Get_Base_DIV_16_DO_IN_Scan_2	;;//_KF8_Temp_Cur_B_SW_/=16;
			__endasm;
			#endif
			//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
			// ݲοǧֱ仯ǰͨǧ
		#if 0
			if(_KF8_Touch_Bits_._KF8_Touch_Sign_Flag)
				_KF8_LIBi_buff_baseline_[ii_buf_SW_]=_KF8_LIBi_buff_refline_[ii_buf_SW_]+_KF8_Temp_Cur_B_SW_;
			else
				_KF8_LIBi_buff_baseline_[ii_buf_SW_]=_KF8_LIBi_buff_refline_[ii_buf_SW_]-_KF8_Temp_Cur_B_SW_;
		#else
			__asm
			;//_KF8_LIBi_buff_baseline_[ii_buf_SW_]=_KF8_LIBi_buff_refline_[ii_buf_SW_]
				CLR PSW,0
				BANKSEL _ii_buf_SW_
				RLCR _ii_buf_SW_
				BANKSEL _Date_Save_Buf_SW_
				MOV _Date_Save_Buf_SW_,R0	;//ƫƵַ
				;;
				ADD R0,#(__KF8_LIBi_buff_refline_)
				BANKSEL __KF8_LIBi_buff_refline_
				LD R1,[R0]

				BANKSEL _Date_Save_Buf_SW_
				MOV R0,_Date_Save_Buf_SW_
				ADD R0,#(__KF8_LIBi_buff_baseline_)
				BANKSEL __KF8_LIBi_buff_baseline_
				ST [R0],R1	;; //low get and set

				BANKSEL _Date_Save_Buf_SW_
				MOV R0,_Date_Save_Buf_SW_
				ADD R0,#(__KF8_LIBi_buff_refline_+1)
				BANKSEL __KF8_LIBi_buff_refline_
				LD R1,[R0]
				BANKSEL _Date_Save_Buf_SW_
				MOV R0,_Date_Save_Buf_SW_
				ADD R0,#(__KF8_LIBi_buff_baseline_+1)
				BANKSEL __KF8_LIBi_buff_baseline_
				ST [R0],R1	;;// high get and set
				;;----------------------------------------
				BANKSEL __KF8_Touch_Bits_
				JB  __KF8_Touch_Bits_,2	;;//_KF8_Touch_Sign_Flag  bit 2
				JMP Ref_Sub_Date_DO_IN_Scan_1
				;;//  +b
				DEC R0
				BANKSEL __KF8_LIBi_buff_baseline_
				LD R1,[R0]
				BANKSEL	__KF8_Temp_Cur_B_SW_
				ADD R1,__KF8_Temp_Cur_B_SW_
				BANKSEL __KF8_LIBi_buff_baseline_
				ST [R0],R1	;// low add and update
				INC R0
				BANKSEL __KF8_LIBi_buff_baseline_
				LD R1,[R0]
				JNB PSW,0
				INC R1
				BANKSEL	__KF8_Temp_Cur_B_SW_
				ADD R1,__KF8_Temp_Cur_B_SW_+1
				BANKSEL __KF8_LIBi_buff_baseline_
				ST [R0],R1	;// high add and update
				JMP FOR_DO_IN_Scan_End
				;;//  -b
			Ref_Sub_Date_DO_IN_Scan_1:
				DEC R0
				BANKSEL _Date_Save_Buf_SW_
				MOV _Date_Save_Buf_SW_,R0;// ַ

				BANKSEL __KF8_LIBi_buff_baseline_
				LD R1,[R0]
				BANKSEL	__KF8_Temp_Cur_B_SW_
				MOV R0,__KF8_Temp_Cur_B_SW_
				SUB R0,R1

				BANKSEL _Date_Save_Buf_SW_
				MOV R1,_Date_Save_Buf_SW_
				BANKSEL __KF8_LIBi_buff_baseline_
				ST [R1],R0	// low sub and update
				INC R1
				LD R0,[R1]
				JB PSW,0
				DEC R0
				BANKSEL __KF8_Temp_Cur_B_SW_
				MOV R1,__KF8_Temp_Cur_B_SW_+1
				SUB R1,R0
				BANKSEL _Date_Save_Buf_SW_
				MOV R0,_Date_Save_Buf_SW_
				INC R0
				BANKSEL __KF8_LIBi_buff_baseline_
				ST [R0],R1	;// high sub and update
			__endasm;
		#endif
			//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
		}// end ͨͨķ
		__asm
			FOR_DO_IN_Scan_End:
		__endasm;
		if(1);
	}// end for
	__asm
		;//for(ii_buf_SW_=0;ii_buf_SW_<CHS_AMOUNT;ii_buf_SW_++)   ++
			BANKSEL _ii_buf_SW_
			INC _ii_buf_SW_
			JMP FOR_NEXT_DO_IN_Scan_1
		FOR_NEXT_DO_IN_Scan_End:
	__endasm;
		if(1);
	//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#else
		for(ii_buf_SW_=0;ii_buf_SW_<CHS_AMOUNT;ii_buf_SW_++)
		{
			if(ii_buf_SW_!=_KF8_Inside_Reference_Channel_Order)
			{
				//-------------------------------
				_KF8_Temp_Cur_B_SW_=_KF8_LIBi_buff_refline_[ii_buf_SW_];
				_KF8_Temp_Cur_B_SW_=_KF8_Temp_Cur_B_SW_/64;

				if(_KF8_lib_bahualvtemportemp_SW_<0)
				{
					_KF8_Touch_Bits_._KF8_Touch_Sign_Flag=1;
					_KF8_Temp_Cur_A_SW_=_KF8_lib_bahualvtemportemp_SW_*(-1);
				}
				else
				{
					_KF8_Touch_Bits_._KF8_Touch_Sign_Flag=0;
					_KF8_Temp_Cur_A_SW_=_KF8_lib_bahualvtemportemp_SW_;
				}
				_KF8_Temp_Cur_B_SW_*=_KF8_Temp_Cur_A_SW_;

				_KF8_Temp_Cur_B_SW_/=16;
				//--------------------------------
				//--------------------------------
				// ݲοǧֱ仯ǰͨǧ
				if(_KF8_Touch_Bits_._KF8_Touch_Sign_Flag)
					_KF8_LIBi_buff_baseline_[ii_buf_SW_]=_KF8_LIBi_buff_refline_[ii_buf_SW_]+_KF8_Temp_Cur_B_SW_;
				else
					_KF8_LIBi_buff_baseline_[ii_buf_SW_]=_KF8_LIBi_buff_refline_[ii_buf_SW_]-_KF8_Temp_Cur_B_SW_;
				//--------------------------------
			}
		}
#endif
}
///******************************************************************************
//*   : void _KF8sptsw_lib_DateChange_get_()
//* :
//* ڲ: ֵ,׼ֵ
//*     : 
//******************************************************************************/
void  _KF8spsw_Lib_DateChange_get_()
{
#if  0
	if(_KF8_Temp_Cur_A_SW_ > _KF8_Temp_Cur_B_SW_)
	{
		_KF8_Touch_Bits_._KF8_Touch_Sign_Flag=1;  //ƫ
		_KF8_Temp_Cur_A_SW_=_KF8_Temp_Cur_A_SW_-_KF8_Temp_Cur_B_SW_;                     /* ׼-ֵ opta*/
	}
	else
	{
		_KF8_Touch_Bits_._KF8_Touch_Sign_Flag=0;  //ƫ
		_KF8_Temp_Cur_A_SW_=_KF8_Temp_Cur_B_SW_-_KF8_Temp_Cur_A_SW_;
	}
#else
	__asm
	BANKSEL __KF8_Temp_Cur_B_SW_
	MOV 	R0,__KF8_Temp_Cur_B_SW_
	BANKSEL __KF8_Temp_Cur_A_SW_
	SUB __KF8_Temp_Cur_A_SW_,R0
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	BANKSEL __KF8_Temp_Cur_B_SW_
	MOV 	R1,(__KF8_Temp_Cur_B_SW_+1)
	JB PSW,0
	INC R1
	BANKSEL __KF8_Temp_Cur_A_SW_
	SUB (__KF8_Temp_Cur_A_SW_+1),R1
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	JNB PSW,0
	JMP label_4_4_4
	;;//====================     ;;//нλС
	BANKSEL	__KF8_Touch_Bits_
	CLR	__KF8_Touch_Bits_, 2  //  _KF8_Touch_Get_Baihualv_Sign_Flag == bit 2

	BANKSEL __KF8_Temp_Cur_A_SW_
	CPL __KF8_Temp_Cur_A_SW_
	CPL (__KF8_Temp_Cur_A_SW_+1)

	INC __KF8_Temp_Cur_A_SW_
	JNB PSW,2
	INC (__KF8_Temp_Cur_A_SW_+1)  		// A=A*(-1)
	JMP label_5_5_5
label_4_4_4:     ;;//޽λ
	BANKSEL	__KF8_Touch_Bits_
	SET	__KF8_Touch_Bits_, 2  //  _KF8_Touch_Get_Baihualv_Sign_Flag == bit 2
label_5_5_5:
	__endasm;
	if(1);
#endif
/*================ǧֱ仯ʣ¼12.5%===============*/
	if(_KF8_Temp_Cur_A_SW_<1024)  // ʱֱΪЧ̶࣬仯Ϊ󣬷򰴹ʽ
	{
		#if 0
		_KF8_Temp_Cur_A_SW_=_KF8_Temp_Cur_A_SW_*64;     //
		_KF8_Temp_Cur_B_SW_=_KF8_Temp_Cur_B_SW_+8; //봦
		_KF8_Temp_Cur_B_SW_=_KF8_Temp_Cur_B_SW_/16; // 16    //
		#else
		__asm
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;// 64
		BANKSEL __KF8_Temp_Cur_A_SW_
		MOV	R0,# 0x06
		INC	R0
		JMP	Mul_64_Flag_1
	Mul_2_DO_1:
		CLR	PSW, 0
		RLC	__KF8_Temp_Cur_A_SW_
		RLC	(__KF8_Temp_Cur_A_SW_ + 1)
	Mul_64_Flag_1:
		DECJZ	R0
		JMP	Mul_2_DO_1
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//8
		MOV	R0,# 0x08
		BANKSEL	__KF8_Temp_Cur_B_SW_
		ADD	__KF8_Temp_Cur_B_SW_, R0
		JNB	PSW, 0
		INC	(__KF8_Temp_Cur_B_SW_ + 1)
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//16
	get_lable_001:
		MOV	R0,# 0x04
		INC	R0
		JMP	Div_16_DO_1
	Div_2_DO_1:
		CLR	PSW, 0
		RRC	(__KF8_Temp_Cur_B_SW_ + 1)
		RRC	__KF8_Temp_Cur_B_SW_
	Div_16_DO_1:
		DECJZ	R0
		JMP	Div_2_DO_1
		__endasm;

		if(1);// Ŷλ룬ɱŻͬʱǶ߼
		#endif
	}
	else if(_KF8_Temp_Cur_A_SW_<16000)
	{
		#if 0
		_KF8_Temp_Cur_A_SW_=_KF8_Temp_Cur_A_SW_*4;     //
		_KF8_Temp_Cur_B_SW_=_KF8_Temp_Cur_B_SW_+128; //봦
		_KF8_Temp_Cur_B_SW_=_KF8_Temp_Cur_B_SW_/256; // 256   //
		#else
		__asm
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;// 4
		BANKSEL __KF8_Temp_Cur_A_SW_
		MOV	R0,# 0x02
		INC	R0
		JMP	Mul_64_Flag_2
	Mul_2_DO_2:
		CLR	PSW, 0
		RLC	__KF8_Temp_Cur_A_SW_
		RLC	(__KF8_Temp_Cur_A_SW_ + 1)
	Mul_64_Flag_2:
		DECJZ	R0
		JMP	Mul_2_DO_2
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//128
		MOV	R0,# 0x80
		BANKSEL	__KF8_Temp_Cur_B_SW_
		ADD	__KF8_Temp_Cur_B_SW_, R0
		JNB	PSW, 0
		INC	(__KF8_Temp_Cur_B_SW_ + 1)
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//256
	get_lable_002:
		MOV R0,(__KF8_Temp_Cur_B_SW_+1)
		MOV	__KF8_Temp_Cur_B_SW_,R0
		CLR (__KF8_Temp_Cur_B_SW_+1)
		__endasm;
		if(1);// Ŷλ룬ɱŻͬʱǶ߼
		#endif
	}
	else
	{
		#if 0
		_KF8_Temp_Cur_A_SW_=_KF8_Temp_Cur_A_SW_*2;
		_KF8_Temp_Cur_B_SW_=_KF8_Temp_Cur_B_SW_+256; //봦
		_KF8_Temp_Cur_B_SW_=_KF8_Temp_Cur_B_SW_/512; // 512   //
		#else
		__asm
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;// 2
		BANKSEL __KF8_Temp_Cur_A_SW_
		CLR	PSW, 0
		RLC	__KF8_Temp_Cur_A_SW_
		RLC	(__KF8_Temp_Cur_A_SW_ + 1)
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//256
		MOV	R0,# 0x01
		BANKSEL	__KF8_Temp_Cur_B_SW_
		ADD	(__KF8_Temp_Cur_B_SW_+1), R0	// һ
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//512
		CLR	PSW, 0
		MOV R0,(__KF8_Temp_Cur_B_SW_+1)
		RRC R0
		MOV	__KF8_Temp_Cur_B_SW_,R0
		CLR (__KF8_Temp_Cur_B_SW_+1)
		__endasm;
		if(1);// Ŷλ룬ɱŻͬʱǶ߼
		#endif
	}

#if 0		// ܱ仯ʴx00ѭжЧʵˣó
	_KF8_lib_bahualvtemportemp_=0;
	while(_KF8_Temp_Cur_A_SW_>_KF8_Temp_Cur_B_SW_)
	{
		_KF8_lib_bahualvtemportemp_++;

		if(_KF8_lib_bahualvtemportemp_>_Define_Max_BaiHuanLv_Get_) //ʹ-xxx~xxxǧֱ仯
			break;

		_KF8_Temp_Cur_A_SW_=_KF8_Temp_Cur_A_SW_-_KF8_Temp_Cur_B_SW_;
	}
#else
	_KF8_lib_bahualvtemportemp_SW_=_KF8_Temp_Cur_A_SW_/_KF8_Temp_Cur_B_SW_;
#endif

	#if 0
	if(_KF8_Touch_Bits_._KF8_Touch_Sign_Flag)
	{
		_KF8_lib_bahualvtemportemp_SW_=_KF8_lib_bahualvtemportemp_SW_*(-1);
	}
	#else
	__asm
			BANKSEL __KF8_Touch_Bits_
			JB __KF8_Touch_Bits_,2	;// _KF8_Touch_Sign_Flag bit 2
			JMP ABS_CHANGE_END_1
			BANKSEL __KF8_lib_bahualvtemportemp_SW_
			CPL __KF8_lib_bahualvtemportemp_SW_
			CPL	(__KF8_lib_bahualvtemportemp_SW_+1)
			INC __KF8_lib_bahualvtemportemp_SW_
			JNB PSW,2
			INC (__KF8_lib_bahualvtemportemp_SW_+1)
		ABS_CHANGE_END_1:
	__endasm;
			if(1);
	#endif
}
///******************************************************************************
//*   : void _KF8sptsw_LIBf_init_touch_()
//* : ʼݣһͨɨ
//* ڲ: 
//*     : 
//******************************************************************************/
void _KF8spsw_LIBf_init_touch_()
{
	_KF8_LIBi_channel_flag_ = 0x0000;//ʼ
	_KF8_LIBc_channel_ = 0;//ʼ

// ţӰλλ޸
	_KF8_Touch_Bits_._KF8_Touch_Work_Flag=0; //ʼ
	_KF8_Touch_Bits_._KF8_Touch_Protect_Flag=0;//ʼ
	//_KF8_Touch_Bits_._KF8_Touch_Sign_Flag=0;//ʼ и
	_KF8_Touch_Bits_._KF8_Touch_Need_Save_Flag=0;

	ii_buf_SW_=0;// ȿȡ
//~~~~~~~~~~~~~~**************%%%%%%%%%%%%%%%~~~~~~~~~~~~~~~~~~~~~~~~~//
	CTIE=1; CTIF = 0;
	//ģʽ趨ﲻҪҪͨţĬʹT1P12
	if(_KF8_Touch_Bits_._KF8_Touch_Work_USE_PWM)
	{
		CTCTL=0x90;	// 0x80 P12 T1H T1L;  0x90 P12 T1U T3L; 0xA0 P05 T1H T1L 0xB0 P05 T1U T3L
		T3L=0;
	}
	else
	{
		T1IE=1; T1IF = 0;
		T1H=0;T1L=0;T1CTL=0x01;
		CTCTL=0x80;
	}
//~~~~~~~~~~~~~~**************%%%%%%%%%%%%%%%~~~~~~~~~~~~~~~~~~~~~~~~~//
	#if 0
		CTCTL |= _KF8_TOUCH_CH_EN[0];	// ѡţǶʵ
		CTCTL |=0x04;// 
		T1U=0;	// E03bug㲻ӰE05Ϊʱϲλֵ
	#else
		__asm
			 MOV R0, # low  (__KF8_TOUCH_CH_EN+0)
			 MOV R1, # high (__KF8_TOUCH_CH_EN+0)
			 PAGESEL	__R2PCHPCL_SW_
			 CALL	__R2PCHPCL_SW_
			 PAGESEL	$
			 ORL _CTCTL,R0
			 MOV R0,#0x02
			 DECJZ R0
			 JMP $-1	// ʹܣͨ趨
		Start_First_CT:
			 SET _CTCTL,6	;// CTSTART
			 NOP
			 JB _CTCTL,6
			 JMP $-3

			 JNB _CTCTL,4
			 CLR _T1U		;// T1U=0
		__endasm;
	#endif

	PUIE = 1;
	AIE = 1;
//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

}
//=====================//==========================//***********************//===============================//========================//
/************************************************************************************
*    : void _KF8sptsw_LIBf_scan_channel_()
*  : 㵱ǰֵƫ׼ߵǧֱ
*  㷨˵
*  ڲ: 
*      :   
************************************************************************************/
void _KF8spsw_LIBf_scan_channel_()
{
	#if 1		//__KF8_LIBc_channel_Ϊ±ƫ
		__asm
			CLR PSW,0
			BANKSEL	__KF8_LIBc_channel_
			RLCR __KF8_LIBc_channel_
			BANKSEL _Date_Save_Buf_SW_
			MOV _Date_Save_Buf_SW_,R0
		__endasm;
	#endif
	/*========================================================*/
	#if 0
		_KF8_Temp_Cur_A_SW_=_KF8_LIBi_buff_hit_[_KF8_LIBc_channel_];
		_KF8_Temp_Cur_B_SW_=_KF8_LIBi_buff_baseline_[_KF8_LIBc_channel_];// жеãʹôݲ
	#else
		__asm
			BANKSEL _Date_Save_Buf_SW_
			MOV R1,_Date_Save_Buf_SW_
			ADD R1,#(__KF8_LIBi_buff_hit_+0)
			;;;;
			BANKSEL	__KF8_LIBi_buff_hit_
			LD R0,[R1]
			BANKSEL   __KF8_Temp_Cur_A_SW_
			MOV __KF8_Temp_Cur_A_SW_,	R0
			;;;;
			INC R1
			BANKSEL	__KF8_LIBi_buff_hit_
			LD R0,[R1]
			BANKSEL   __KF8_Temp_Cur_A_SW_
			MOV (__KF8_Temp_Cur_A_SW_+1),	R0
			;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
			BANKSEL _Date_Save_Buf_SW_
			MOV R1,_Date_Save_Buf_SW_
			ADD R1,#(__KF8_LIBi_buff_baseline_+0)
			;;;;
			BANKSEL	__KF8_LIBi_buff_baseline_
			LD R0,[R1]
			BANKSEL   __KF8_Temp_Cur_B_SW_
			MOV __KF8_Temp_Cur_B_SW_,	R0
			;;;;
			INC R1
			BANKSEL	__KF8_LIBi_buff_baseline_
			LD R0,[R1]
			BANKSEL   __KF8_Temp_Cur_B_SW_
			MOV (__KF8_Temp_Cur_B_SW_+1),	R0
		__endasm;
	#endif
	/*================ȡ仯ֵ仯===============*/
		_KF8spsw_Lib_DateChange_get_();

	// οͨĶ뼰
	//###########################################################################//
		__asm
		 MOV R1,#high (__KF8_Inside_Reference_Channel_Order+0)
		 MOV R0,#low (__KF8_Inside_Reference_Channel_Order+0)
		 PAGESEL	__R2PCHPCL_SW_
		 CALL	__R2PCHPCL_SW_
		 PAGESEL	$
		 BANKSEL __KF8_LIBc_channel_
		 MOV R1,__KF8_LIBc_channel_
		 XOR R0,R1
		 JB PSW,2
		 JMP NOT_Reference_Channel_Order_Deal_1
		__endasm;
//	if(_KF8_LIBc_channel_==_KF8_Inside_Reference_Channel_Order)
	{
	 //###########################################################################//
		__asm
		Reference_Channel_Order_Deal_1:
		__endasm;
		//=================_KF8_Data_Steady_Threshold_Set_ı仯Ϊȶ======================
		#if 0
			change_buf_SW_=_KF8_LIBi_Date_Change_[_KF8_LIBc_channel_]-_KF8_lib_bahualvtemportemp_SW_;
			if(change_buf_SW_<0)
				change_buf_SW_=change_buf_SW_*(-1);
		#else
		 __asm
		 	CLR PSW,0
			BANKSEL __KF8_LIBc_channel_
			RLCR __KF8_LIBc_channel_
			ADD R0,#(__KF8_LIBi_Date_Change_+0)
			;;;;
			BANKSEL	__KF8_LIBi_Date_Change_
			LD R1,[R0]
			BANKSEL _change_buf_SW_
			MOV _change_buf_SW_,R1
			INC R0
			BANKSEL	__KF8_LIBi_Date_Change_
			LD R1,[R0]
			BANKSEL _change_buf_SW_
			MOV _change_buf_SW_+1,R1
			;;;;
			BANKSEL __KF8_lib_bahualvtemportemp_SW_
			MOV R1, __KF8_lib_bahualvtemportemp_SW_
			BANKSEL _change_buf_SW_
			SUB _change_buf_SW_,R1
			JB PSW,0
			DEC _change_buf_SW_+1
			BANKSEL __KF8_lib_bahualvtemportemp_SW_
			MOV R1, __KF8_lib_bahualvtemportemp_SW_+1
			BANKSEL _change_buf_SW_
			SUB _change_buf_SW_+1,R1	;//get change_buf_SW_
			;;-----------------------------
			BANKSEL	_change_buf_SW_
			JB	_change_buf_SW_+1, 7
			JMP	lable_qufanover
			CPL	_change_buf_SW_
			CPL	_change_buf_SW_+1
			INC _change_buf_SW_
			JNB PSW,2
			INC _change_buf_SW_+1
		 lable_qufanover:				;//Ա仯ȡ
		 __endasm;
		#endif
		  if(1);
		#if 0
			_KF8_LIBi_Date_Change_[_KF8_LIBc_channel_]=_KF8_lib_bahualvtemportemp_SW_;
		#else
			__asm
				CLR PSW,0
				BANKSEL __KF8_LIBc_channel_
				RLCR __KF8_LIBc_channel_
				ADD R0,#(__KF8_LIBi_Date_Change_+0)
				BANKSEL	__KF8_lib_bahualvtemportemp_SW_
				MOV R1,__KF8_lib_bahualvtemportemp_SW_
				BANKSEL __KF8_LIBi_Date_Change_
				ST [R0],R1
				BANKSEL	__KF8_lib_bahualvtemportemp_SW_
				MOV R1,__KF8_lib_bahualvtemportemp_SW_+1
				INC R0
				BANKSEL __KF8_LIBi_Date_Change_
				ST [R0],R1
			__endasm;
		#endif

			//---------------------------------------------------------------
			__asm
			 MOV R1,# high (__KF8_Inside_Reference_Channel_Disturb_Threshold_Set_+0)
			 MOV R0,# low  (__KF8_Inside_Reference_Channel_Disturb_Threshold_Set_+0)
			 PAGESEL	__R2PCHPCL_SW_
			 CALL	__R2PCHPCL_SW_
			 PAGESEL	$
			 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			 MOV __KF8_LIBi_Touch_New_Date_SW_,R0
			 MOV R1,#high(__KF8_Inside_Reference_Channel_Disturb_Threshold_Set_+1)
			 MOV R0,#low(__KF8_Inside_Reference_Channel_Disturb_Threshold_Set_+1)
			 PAGESEL	__R2PCHPCL_SW_
			 CALL	__R2PCHPCL_SW_
			 PAGESEL	$
			 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			 MOV __KF8_LIBi_Touch_New_Date_SW_+1,R0	;//get _KF8_Inside_Reference_Channel_Disturb_Threshold_Set_ to __KF8_LIBi_Touch_New_Date_SW_
			;;------------------------------
			 BANKSEL _change_buf_SW_
			 MOV R0,_change_buf_SW_+1
			 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			 SUB R0,__KF8_LIBi_Touch_New_Date_SW_+1
			 JB PSW,0	;// λλ
			 JMP DATE_CHANGE_BIG_FLG_DO_1
			 JB PSW, 2	;// λȣжϵλ
			 JMP NOT_DATE_CHANGE_BIG_FLG_DO_1
			 BANKSEL _change_buf_SW_
			 MOV R0,_change_buf_SW_
			 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			 SUB R0,__KF8_LIBi_Touch_New_Date_SW_
			 JNB PSW,0		// λ£λλ
			 JMP NOT_DATE_CHANGE_BIG_FLG_DO_1
			 __endasm;
		//	if(change_buf_SW_>_KF8_Inside_Reference_Channel_Disturb_Threshold_Set_)
			{
				__asm
				  DATE_CHANGE_BIG_FLG_DO_1:
				__endasm;

				_KF8_Touch_Bits_._KF8_Touch_Protect_Flag=1;
				_KF8_Disturb_Protect_Circle_=0;
				_KF8_Up_BaseLine_Circle_=0;

				__asm
				  JMP DATE_CHANGE_FLG_END
				__endasm;
			}
		//	else
			{
				__asm
				  NOT_DATE_CHANGE_BIG_FLG_DO_1:
				__endasm;
				//------------------------------------------------------------
				if(_KF8_Touch_Bits_._KF8_Touch_Protect_Flag)
				{
				#if 0
					_KF8_Disturb_Protect_Circle_++;
					if(_KF8_Disturb_Protect_Circle_>_KF8_Disturb_Protect_Circle_Define)
					{
						_KF8_Disturb_Protect_Circle_=0;
						_KF8_Touch_Bits_._KF8_Touch_Protect_Flag=0;
					}
				#else
					__asm
					;;------------------------
					MOV R1,# high (__KF8_Disturb_Protect_Circle_Define+0)
					MOV R0,# low (__KF8_Disturb_Protect_Circle_Define+0)
					PAGESEL	__R2PCHPCL_SW_
					CALL	__R2PCHPCL_SW_
					PAGESEL	$
					BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					MOV __KF8_LIBi_Touch_New_Date_SW_,R0
					MOV R1,# high (__KF8_Disturb_Protect_Circle_Define+1)
					MOV R0,# low (__KF8_Disturb_Protect_Circle_Define+1)
					PAGESEL	__R2PCHPCL_SW_
					CALL	__R2PCHPCL_SW_
					PAGESEL	$
					BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					MOV __KF8_LIBi_Touch_New_Date_SW_+1,R0	;//get _KF8_Disturb_Protect_Circle_Define to __KF8_LIBi_Touch_New_Date_SW_
					;;------------------------
					BANKSEL __KF8_Disturb_Protect_Circle_
					INC	__KF8_Disturb_Protect_Circle_
					JNB PSW,2
					INC	__KF8_Disturb_Protect_Circle_+1	;;//_KF8_Disturb_Protect_Circle_++;
					;;-------------------------
					MOV R0,__KF8_Disturb_Protect_Circle_
					MOV R1,__KF8_Disturb_Protect_Circle_+1

					BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					SUB R1,__KF8_LIBi_Touch_New_Date_SW_+1
					JB PSW,0
					JMP Protect_Time_End_Deal_Flag ;// λλ
					JB PSW,2
					JMP Protect_Time_Deal_End_Flag	;//λȲ
					SUB R0,__KF8_LIBi_Touch_New_Date_SW_
					JNB PSW,0			;// λȣλλ
					JMP Protect_Time_Deal_End_Flag
					;;--------------------
				Protect_Time_End_Deal_Flag:
					BANKSEL __KF8_Disturb_Protect_Circle_
					CLR __KF8_Disturb_Protect_Circle_
					CLR __KF8_Disturb_Protect_Circle_+1	;;//_KF8_Disturb_Protect_Circle_=0;
					BANKSEL	__KF8_Touch_Bits_
					CLR __KF8_Touch_Bits_,1	;//_KF8_Touch_Bits_._KF8_Touch_Protect_Flag=0; _KF8_Touch_Protect_Flag  bit 1
					;;--------------------
				Protect_Time_Deal_End_Flag:
					__endasm;
					if(1);
				#endif
				}	// ڼĴ봦
				else
				{
					//ͨĲοֵ
					//_KF8_Up_BaseLine_Circle_++;	// Ƕ
					//---------------------------
					__asm
					 MOV R1,# high (__KF8_Up_BaseLine_Circle_Define+0)
					 MOV R0,# low (__KF8_Up_BaseLine_Circle_Define+0)
					 PAGESEL	__R2PCHPCL_SW_
					 CALL	__R2PCHPCL_SW_
					 PAGESEL	$
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 MOV __KF8_LIBi_Touch_New_Date_SW_,R0
					 MOV R1,# high (__KF8_Up_BaseLine_Circle_Define+1)
					 MOV R0,# low (__KF8_Up_BaseLine_Circle_Define+1)
					 PAGESEL	__R2PCHPCL_SW_
					 CALL	__R2PCHPCL_SW_
					 PAGESEL	$
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 MOV __KF8_LIBi_Touch_New_Date_SW_+1,R0	;//get _KF8_Up_BaseLine_Circle_Define to __KF8_LIBi_Touch_New_Date_SW_
					 ;;----------------------------
					 BANKSEL __KF8_Up_BaseLine_Circle_
					 INC __KF8_Up_BaseLine_Circle_
					 JNB PSW,2
					 INC __KF8_Up_BaseLine_Circle_+1
					 MOV R0,__KF8_Up_BaseLine_Circle_
					 MOV R1,__KF8_Up_BaseLine_Circle_+1
					 ;;----------------------------
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 SUB R1,__KF8_LIBi_Touch_New_Date_SW_+1
					 JB PSW,0	;;// λλ
					 JMP Update_Baseline_Deal_Flag
					 JB PSW,2
					 JMP UP_BaseLine_End	;//λȲ
					 SUB R0,__KF8_LIBi_Touch_New_Date_SW_
					 JNB PSW,0	;;//λȣλλ
					 JMP UP_BaseLine_End
					__endasm;
					//if(_KF8_Up_BaseLine_Circle_>_KF8_Up_BaseLine_Circle_Define)
					{
						// _KF8_Up_BaseLine_Circle_=0;
						 __asm
						Update_Baseline_Deal_Flag:
							 BANKSEL __KF8_Up_BaseLine_Circle_
							 CLR __KF8_Up_BaseLine_Circle_
							 CLR __KF8_Up_BaseLine_Circle_+1
						__endasm;
						_KF8spsw_Lib_BaseLine_Reget_();
					}
					__asm
						UP_BaseLine_End:
					__endasm;
				}
			}
			__asm
				DATE_CHANGE_FLG_END:
			__endasm;
		__asm
			JMP Channel_Order_Deal_END
		__endasm;
		if(1);
	//###########################################################################//
	}// οͨĴ
//	else
	// ͨĴ
	{
	//###########################################################################//
		__asm
		NOT_Reference_Channel_Order_Deal_1:
		__endasm;
//==============׼ȶʱж
		if(!_KF8_Touch_Bits_._KF8_Touch_Protect_Flag)
		{
			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Ǳ1 ݱ仯
			#if  0
			_KF8_LIBi_Date_Change_[_KF8_LIBc_channel_]=_KF8_lib_bahualvtemportemp_SW_;
			#else
			__asm
				CLR PSW,0
				BANKSEL __KF8_LIBc_channel_
				RLCR __KF8_LIBc_channel_
				ADD R0,#(__KF8_LIBi_Date_Change_)
				BANKSEL __KF8_lib_bahualvtemportemp_SW_
				MOV R1,__KF8_lib_bahualvtemportemp_SW_
				BANKSEL __KF8_LIBi_Date_Change_
				ST [R0],R1
				BANKSEL __KF8_lib_bahualvtemportemp_SW_
				MOV R1,__KF8_lib_bahualvtemportemp_SW_+1
				INC R0
				BANKSEL __KF8_LIBi_Date_Change_
				ST [R0],R1
			__endasm;
			#endif
			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Ǳ2 ƫֱͰʶ
			__asm
				CLR PSW,0
				BANKSEL __KF8_LIBc_channel_
				RLCR __KF8_LIBc_channel_
				BANKSEL _Date_Save_Buf_SW_
				MOV _Date_Save_Buf_SW_,R0	;
			__endasm;
			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Ǳ3 ж
			__asm
				BANKSEL _Date_Save_Buf_SW_
				MOV R0,_Date_Save_Buf_SW_
				ADD R0,#(__KF8_LIBi_Date_Change_+0)
				BANKSEL __KF8_LIBi_Date_Change_
				LD R1,[R0]
				BANKSEL __KF8_LIBi_Touch_New_Date_SW_
				MOV __KF8_LIBi_Touch_New_Date_SW_,R1
				INC R0
				BANKSEL __KF8_LIBi_Date_Change_
				LD R1,[R0]
				BANKSEL __KF8_LIBi_Touch_New_Date_SW_
				MOV __KF8_LIBi_Touch_New_Date_SW_+1,R1
				JNB R1,7
				JMP   Key_Up_State_Flag_1		// 㵯
				;;-------------//get _KF8_LIBi_Date_Change_ in _KF8_LIBi_Touch_New_Date_SW_
				BANKSEL _Date_Save_Buf_SW_
				MOV R0,_Date_Save_Buf_SW_
				ADD R0,#Low(_CONFIG_NO_FINGER_THRESHOLD+1)
				MOV R1,#High(_CONFIG_NO_FINGER_THRESHOLD+1)
				JNB PSW,0
				INC R1
				PAGESEL	__R2PCHPCL_SW_
				CALL	__R2PCHPCL_SW_
				PAGESEL	$
				BANKSEL __KF8_LIBi_Touch_New_Date_SW_
				SUB R0,__KF8_LIBi_Touch_New_Date_SW_+1
				JB PSW,0		// λλ
				JMP  Key_Up_State_Flag_1
				JB PSW,2
				JMP KEY_UNDO_DEAL_1	;//λȲ
				;;===
				BANKSEL _Date_Save_Buf_SW_
				MOV R0,_Date_Save_Buf_SW_
				ADD R0,#Low(_CONFIG_NO_FINGER_THRESHOLD+0)
				MOV R1,#High(_CONFIG_NO_FINGER_THRESHOLD+0)
				JNB PSW,0
				INC R1
				PAGESEL	__R2PCHPCL_SW_
				CALL	__R2PCHPCL_SW_
				PAGESEL	$
				BANKSEL __KF8_LIBi_Touch_New_Date_SW_
				SUB R0,__KF8_LIBi_Touch_New_Date_SW_
				JNB PSW,0	// λʱλλ
				JMP KEY_UNDO_DEAL_1
			__endasm;
//			//if(_KF8_LIBi_Date_Change_[_KF8_LIBc_channel_]<CONFIG_NO_FINGER_THRESHOLD[_KF8_LIBc_channel_])
			{
				__asm
					Key_Up_State_Flag_1:
				__endasm;
				//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
				__asm
					 MOV R1,# high (_TCS_AMOUNT+0)
					 MOV R0,# low (_TCS_AMOUNT+0)
					 PAGESEL	__R2PCHPCL_SW_
					 CALL	__R2PCHPCL_SW_
					 PAGESEL	$
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 MOV __KF8_LIBi_Touch_New_Date_SW_,R0
					 MOV R1,# high (_TCS_AMOUNT+1)
					 MOV R0,# low (_TCS_AMOUNT+1)
					 PAGESEL	__R2PCHPCL_SW_
					 CALL	__R2PCHPCL_SW_
					 PAGESEL	$
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 MOV __KF8_LIBi_Touch_New_Date_SW_+1,R0	;;// get TCS_AMOUNT to __KF8_LIBi_Touch_New_Date_SW_
					 ;;--------------
					 BANKSEL _Date_Save_Buf_SW_
					 MOV R0,_Date_Save_Buf_SW_
					 ADD R0,#(__KF8_LIBc_touch_count_+1)
					 BANKSEL __KF8_LIBc_touch_count_
					 LD R1,[R0]
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 SUB R1,__KF8_LIBi_Touch_New_Date_SW_+1
					 JB PSW,0	// λλ
					 JMP Key_Down_To_Know_UP
					 JB PSW,2	// λʱжϵλ
					 JMP KEY_UNDO_END_FLAG
					 DEC R0
					 BANKSEL __KF8_LIBc_touch_count_
					 LD R1,[R0]
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 SUB R1,__KF8_LIBi_Touch_New_Date_SW_
					 JNB PSW,0	// λ λλ
					 JMP KEY_UNDO_END_FLAG
				 __endasm;
//				// if(_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]>TCS_AMOUNT) //µ1
				//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
				 {
					 __asm
					 Key_Down_To_Know_UP:
					 __endasm;
						//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					 __asm
						 MOV R1,# high (_TCS_AMOUNT+0)
						 MOV R0,# low (_TCS_AMOUNT+0)
						 PAGESEL	__R2PCHPCL_SW_
						 CALL	__R2PCHPCL_SW_
						 PAGESEL	$
						 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						 MOV __KF8_LIBi_Touch_New_Date_SW_,R0

						 MOV R1,# high (_TCS_AMOUNT+1)
						 MOV R0,# low (_TCS_AMOUNT+1)
						 PAGESEL	__R2PCHPCL_SW_
						 CALL	__R2PCHPCL_SW_
						 PAGESEL	$
						 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						 MOV __KF8_LIBi_Touch_New_Date_SW_+1,R0
						 CLR PSW,0
						 RLC __KF8_LIBi_Touch_New_Date_SW_
						 RLC __KF8_LIBi_Touch_New_Date_SW_+1	;;//get  TCS_AMOUNT*2 to __KF8_LIBi_Touch_New_Date_SW_
						 ;;//====
						 BANKSEL _Date_Save_Buf_SW_
						 MOV R0,_Date_Save_Buf_SW_
						 ADD R0,#(__KF8_LIBc_touch_count_+1)
						 BANKSEL __KF8_LIBc_touch_count_
						 LD R1,[R0]
						 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						 SUB R1, __KF8_LIBi_Touch_New_Date_SW_+1
						 JB PSW,0	// λλ
						 JMP KEY_UP_FLAG_DEAL_1
						 JB PSW,2	// λжϵλ
						 JMP Key_Down_To_Up_Delay
						 DEC R0
						 BANKSEL __KF8_LIBc_touch_count_
						 LD R1,[R0]
						 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						 SUB R1, __KF8_LIBi_Touch_New_Date_SW_
						 JB PSW,0		;// λȣλλ
						 JMP KEY_UP_FLAG_DEAL_1					;;// <= ж
					 __endasm;
						//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//					// if(_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]<(TCS_AMOUNT*2))
					 {
						 __asm
							Key_Down_To_Up_Delay:
						 __endasm;
//						 //-----------------------------------------
						#if 0
						 _KF8_LIBc_touch_count_[_KF8_LIBc_channel_]++;
						#else
						 __asm
							 BANKSEL __KF8_LIBc_touch_count_
							 LD R1,[R0]
							 ADD R1,#0x01
							 ST [R0],R1
							 JB PSW,0
							 JMP KEY_UNDO_END_FLAG
							 INC R0
							 LD R1,[R0]
							 INC R1
							 ST [R0],R1
						 //-----------------------------------------
							 JMP KEY_UNDO_END_FLAG
						  __endasm;
						#endif
					 }
//					// else
					 {
						 __asm
						 KEY_UP_FLAG_DEAL_1:
						 __endasm;
						 //-----------------------------------------
						#if 0
						  _KF8_LIBc_touch_count_[_KF8_LIBc_channel_]=0;
						#else
							 __asm
								 CLR R1
								 BANKSEL __KF8_LIBc_touch_count_
								 ST [R0],R1
								 INC R0
								 ST [R0],R1
							 __endasm;
						#endif
						//-----------------------------------------
						#if 0
							 _KF8_LIBi_channel_flag_&=~_KF8_LIBt_buff_bit_SW_[_KF8_TOUCH_CH_EN[_KF8_LIBc_channel_]];
						#else
							 __asm
							 ;;-----------------------------
							 BANKSEL __KF8_LIBc_channel_
							 MOV R0, __KF8_LIBc_channel_
							 ADD R0, #low  (__KF8_TOUCH_CH_EN)
							 MOV R1, #high (__KF8_TOUCH_CH_EN)
							 JNB PSW,0
							 INC R1
							 PAGESEL	__R2PCHPCL_SW_
							 CALL	__R2PCHPCL_SW_
							 PAGESEL	$
							 ;;===
							 CLR PSW,0
							 RLC R0
							 BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
							 MOV __KF8_lib_Date_Uchar_Temp_SW_ , R0
							 ;;;;;;;;;;;;;;;;;;;;
							 ADD R0,#low(__KF8_LIBt_buff_bit_SW_+0)
							 MOV R1,#high(__KF8_LIBt_buff_bit_SW_+0)
							 JNB PSW,0
							 INC R1
							 PAGESEL	__R2PCHPCL_SW_
							 CALL	__R2PCHPCL_SW_
							 PAGESEL	$
							 CPL R0
							 BANKSEL __KF8_LIBi_channel_flag_
							 AND __KF8_LIBi_channel_flag_, R0	;// low set
							 ;;;;
							 BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
							 MOV R0, __KF8_lib_Date_Uchar_Temp_SW_

							 ADD R0,#low(__KF8_LIBt_buff_bit_SW_+1)
							 MOV R1,#high(__KF8_LIBt_buff_bit_SW_+1)
							 JNB PSW,0
							 INC R1
							 PAGESEL	__R2PCHPCL_SW_
							 CALL	__R2PCHPCL_SW_
							 PAGESEL	$
							 CPL R0
							 BANKSEL __KF8_LIBi_channel_flag_
							 AND (__KF8_LIBi_channel_flag_+1), R0	;// high set
							 ;;-------------------------
							 JMP KEY_UNDO_END_FLAG
						 __endasm;
						#endif
					 }
				 }
				 __asm
				 	 JMP KEY_UNDO_END_FLAG
				 __endasm;
			}
//			//else
			{
				__asm
				KEY_UNDO_DEAL_1:
				__endasm;
			#if 0
				 if(_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]>(TCS_AMOUNT+1)) //==Ϊжϵ㣬1
				 {
					 _KF8_LIBc_touch_count_[_KF8_LIBc_channel_]--;
				 }
			#else
				 __asm
					 MOV R1,# high (_TCS_AMOUNT+0)
					 MOV R0,# low (_TCS_AMOUNT+0)
					 PAGESEL	__R2PCHPCL_SW_
					 CALL	__R2PCHPCL_SW_
					 PAGESEL	$
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 MOV __KF8_LIBi_Touch_New_Date_SW_,R0

					 MOV R1,# high (_TCS_AMOUNT+1)
					 MOV R0,# low (_TCS_AMOUNT+1)
					 PAGESEL	__R2PCHPCL_SW_
					 CALL	__R2PCHPCL_SW_
					 PAGESEL	$
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 MOV __KF8_LIBi_Touch_New_Date_SW_+1,R0

					 INC __KF8_LIBi_Touch_New_Date_SW_
					 JNB PSW,2
					 INC __KF8_LIBi_Touch_New_Date_SW_+1	;;// GET  TCS_AMOUNT+1
					 ;;--------------------------------
					 BANKSEL _Date_Save_Buf_SW_
					 MOV R0,_Date_Save_Buf_SW_
					 ADD R0,#(__KF8_LIBc_touch_count_+1)
					 BANKSEL __KF8_LIBc_touch_count_
					 LD R1,[R0]
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 SUB R1,__KF8_LIBi_Touch_New_Date_SW_+1
					 JB PSW,0	;//λλ
					 JMP Key_Up_Back_Count_DS_1
					 JB PSW,2	;//λжϵλ
					 JMP KEY_UNDO_END_FLAG
					 DEC R0
					 BANKSEL __KF8_LIBc_touch_count_
					 LD R1,[R0]
					 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
					 SUB R1,__KF8_LIBi_Touch_New_Date_SW_
					 JNB PSW,0	;;// λȣλλ
					 JMP KEY_UNDO_END_FLAG	;// < ж
					 ;;-------------------------------
					 ;;//_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]--;
				Key_Up_Back_Count_DS_1:
					 BANKSEL __KF8_LIBc_touch_count_
					 LD R1,[R0]
					 ADD R1,#0xFF
					 ST [R0],R1
					 JNB PSW,0
					 JMP KEY_UNDO_END_FLAG
					 INC R0
					 BANKSEL __KF8_LIBc_touch_count_
					 LD R1,[R0]
					 DEC R1
					 ST [R0],R1
					 ;;// --
				__endasm;
					if(1);
			#endif
			}
			__asm
				KEY_UNDO_END_FLAG:
			__endasm;
		/*########################################################################################*/
			//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Ǳ4 ʶ
			//========== µķֵǷж====================
				__asm
				 BANKSEL _Date_Save_Buf_SW_
				 MOV R0,_Date_Save_Buf_SW_
				 ADD R0,#low(__KF8_Config_Finger_Threshold+0)
				 MOV R1,#high(__KF8_Config_Finger_Threshold+0)
				 JNB PSW,0
				 INC R1
				 PAGESEL	__R2PCHPCL_SW_
				 CALL	__R2PCHPCL_SW_
				 PAGESEL	$
				 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
				 MOV __KF8_LIBi_Touch_New_Date_SW_,R0

				 BANKSEL _Date_Save_Buf_SW_
				 MOV R0,_Date_Save_Buf_SW_
				 ADD R0,#low(__KF8_Config_Finger_Threshold+1)
				 MOV R1,#high(__KF8_Config_Finger_Threshold+1)
				 JNB PSW,0
				 INC R1
				 PAGESEL	__R2PCHPCL_SW_
				 CALL	__R2PCHPCL_SW_
				 PAGESEL	$
				 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
				 MOV __KF8_LIBi_Touch_New_Date_SW_+1,R0	;// get _KF8_Config_Finger_Threshold to __KF8_LIBi_Touch_New_Date_SW_

				 BANKSEL _Date_Save_Buf_SW_
				 MOV R0,_Date_Save_Buf_SW_
				 ADD R0,#(__KF8_LIBi_Date_Change_+1)
				 BANKSEL __KF8_LIBi_Date_Change_
				 LD R1,[R0]
				 JNB R1,7
				 JMP   Key_Down_Deal_No_Down_1		;// ʶ
				 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
				 SUB R1,__KF8_LIBi_Touch_New_Date_SW_+1
				 JB PSW,0	;;//λλ
				 JMP Key_Down_Deal_Down_1
				 JB PSW,2	;;//λ0Ĳ
				 JMP Key_Down_Deal_No_Down_1
				 DEC R0
				 BANKSEL __KF8_LIBi_Date_Change_
				 LD R1,[R0]
				 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
				 SUB R1,__KF8_LIBi_Touch_New_Date_SW_
				 JNB PSW,0	;;//λȣλλ
				 JMP Key_Down_Deal_No_Down_1
				__endasm;

			//	if(_KF8_LIBi_Date_Change_[_KF8_LIBc_channel_]>_KF8_Config_Finger_Threshold[_KF8_LIBc_channel_])
				{
				//========== µķֵ====================
				__asm
					Key_Down_Deal_Down_1:
				__endasm;
				/*******************************************/
				#if 0
					 if(_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]<TCS_AMOUNT)
					 {
						 _KF8_LIBc_touch_count_[_KF8_LIBc_channel_]++;
					 }
				#else
	            	 __asm
	    			  BANKSEL _Date_Save_Buf_SW_
	    			  MOV R0,_Date_Save_Buf_SW_
		         	  ADD R0,#(__KF8_LIBc_touch_count_+0)
		         	  BANKSEL __KF8_LIBc_touch_count_
		         	  LD R1,[R0]
		         	  BANKSEL __KF8_LIBi_Touch_New_Date_SW_
		         	  MOV   __KF8_LIBi_Touch_New_Date_SW_,R1
		         	  INC R0
		         	  BANKSEL __KF8_LIBc_touch_count_
		         	  LD R1,[R0]
		         	  BANKSEL __KF8_LIBi_Touch_New_Date_SW_
		         	  MOV   __KF8_LIBi_Touch_New_Date_SW_+1,R1		;// get _KF8_LIBc_touch_count_
	            	 //====
		         	  MOV R1,#High(_TCS_AMOUNT+1)
		         	  MOV R0,#Low(_TCS_AMOUNT+1)
	            	  PAGESEL __R2PCHPCL_SW_
	            	  CALL __R2PCHPCL_SW_
	            	  PAGESEL $
	            	  BANKSEL __KF8_LIBi_Touch_New_Date_SW_
	            	  SUB R0, __KF8_LIBi_Touch_New_Date_SW_+1
	            	  JB PSW,0 ;// λλ
		         	  JMP KEY_DOWN_DEAL_DELAY_1
	            	  JB PSW,2 ;// λж
		         	  JMP Key_Down_ADD_Deal_End
		         	  MOV R1,#High(_TCS_AMOUNT+0)
		         	  MOV R0,#Low(_TCS_AMOUNT+0)
	            	  PAGESEL __R2PCHPCL_SW_
	            	  CALL __R2PCHPCL_SW_
	            	  PAGESEL $
	            	  BANKSEL __KF8_LIBi_Touch_New_Date_SW_
	            	  SUB R0, __KF8_LIBi_Touch_New_Date_SW_
	            	  JNB PSW,0 ; //λȵλ λ
	            	  JMP Key_Down_ADD_Deal_End
	            	  ;;---------------------------//_KF8_LIBc_touch_count_++
	             KEY_DOWN_DEAL_DELAY_1:
	            	  CLR PSW,0
		        	  BANKSEL __KF8_LIBc_channel_
		         	  RLCR __KF8_LIBc_channel_
		         	  ADD R0,#(__KF8_LIBc_touch_count_)
		         	  BANKSEL __KF8_LIBc_touch_count_
		         	  LD R1,[R0]
		         	  INC R1
		         	  ST [R0],R1
		         	  JB PSW,2
		         	  JMP Key_Down_ADD_Deal_End
		         	  INC R0
		         	  LD R1,[R0]
		         	  INC R1
		         	  ST [R0],R1
		         	  JMP Key_Down_End_Deal_1
		       	   __endasm;
		       	   if(1);
				#endif

				#if 0
					 else if(_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]==TCS_AMOUNT )
					 {
						_KF8_LIBi_channel_flag_|=_KF8_LIBt_buff_bit_SW_[_KF8_TOUCH_CH_EN[_KF8_LIBc_channel_]];
						_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]++;
					 }
				#else
		       	   __asm
		       	   Key_Down_ADD_Deal_End:
						 MOV R1,# high (_TCS_AMOUNT+0)
						 MOV R0,# low (_TCS_AMOUNT+0)
						 PAGESEL	__R2PCHPCL_SW_
						 CALL	__R2PCHPCL_SW_
						 PAGESEL	$
						 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						 MOV __KF8_LIBi_Touch_New_Date_SW_,R0
						 MOV R1,# high (_TCS_AMOUNT+1)
						 MOV R0,# low (_TCS_AMOUNT+1)
						 PAGESEL	__R2PCHPCL_SW_
						 CALL	__R2PCHPCL_SW_
						 PAGESEL	$
						 BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						 MOV __KF8_LIBi_Touch_New_Date_SW_+1,R0
						 ;;====

						 CLR PSW,0
						 BANKSEL __KF8_LIBc_channel_
						 RLCR __KF8_LIBc_channel_
						 ADD R0,#__KF8_LIBc_touch_count_
						 BANKSEL __KF8_LIBc_touch_count_
						 LD R1,[R0]
						 BANKSEL   __KF8_LIBi_Touch_New_Date_SW_
						 XOR R1,__KF8_LIBi_Touch_New_Date_SW_
						 JB PSW,2
						 JMP	Key_Down_End_Deal_1
						 INC R0
						 BANKSEL __KF8_LIBc_touch_count_
						 LD R1,[R0]
						 BANKSEL   __KF8_LIBi_Touch_New_Date_SW_
						 XOR R1,__KF8_LIBi_Touch_New_Date_SW_+1
						 JB PSW,2
						 JMP Key_Down_End_Deal_1
					   ;;//_KF8_LIBc_touch_count_++
						 DEC R0
						 BANKSEL __KF8_LIBc_touch_count_
						 LD R1,[R0]
						 ADD R1,#0x01
						 ST [R0],R1
						 JB PSW,0
						 JMP SET_Key_Down_Flag
						 INC R0
						 LD R1,[R0]
						 INC R1
						 ST [R0],R1
					 SET_Key_Down_Flag:
					   ;;//_KF8_LIBi_channel_flag_|=_KF8_LIBt_buff_bit_SW_[_KF8_TOUCH_CH_EN[_KF8_LIBc_channel_]];
					     BANKSEL __KF8_LIBc_channel_
						 MOV R0, __KF8_LIBc_channel_
						 ADD R0, #low  (__KF8_TOUCH_CH_EN)
						 MOV R1, #high (__KF8_TOUCH_CH_EN)
						 JNB PSW,0
						 INC R1
						 PAGESEL	__R2PCHPCL_SW_
						 CALL	__R2PCHPCL_SW_
						 PAGESEL	$
						 CLR PSW,0
						 RLC R0

						 BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
						 MOV __KF8_lib_Date_Uchar_Temp_SW_ , R0

						 ;;;;;;;;;;;;;;;;;;;;
						 ADD R0,#low(__KF8_LIBt_buff_bit_SW_)
						 MOV R1,#high(__KF8_LIBt_buff_bit_SW_)
						 JNB PSW,0
						 INC R1

						 PAGESEL	__R2PCHPCL_SW_
						 CALL	__R2PCHPCL_SW_
						 PAGESEL	$
						 ;;;;;;;;;;;;;;;;
						 BANKSEL __KF8_LIBi_channel_flag_
						 ORL __KF8_LIBi_channel_flag_,R0
						 BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
						 MOV R0, __KF8_lib_Date_Uchar_Temp_SW_
						 INC R0
						 ADD R0,#low(__KF8_LIBt_buff_bit_SW_)
						 MOV R1,#high(__KF8_LIBt_buff_bit_SW_)
						 JNB PSW,0
						 INC R1

						 PAGESEL	__R2PCHPCL_SW_
						 CALL	__R2PCHPCL_SW_
						 PAGESEL	$
						 ;;;;;;;;;;;;;;;;;;;;;
						 BANKSEL __KF8_LIBi_channel_flag_
						 ORL (__KF8_LIBi_channel_flag_+1), R0
		       	   __endasm;
				#endif
				/*******************************************/
				 __asm
				 Key_Down_End_Deal_1:
				 	 	 JMP Key_Down_Deal_END
				 __endasm;
				}//ʶ´
			//	else
				{
					__asm
					Key_Down_Deal_No_Down_1:
					__endasm;

					/*******************************************/
					#if 0
					if(_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]>0&&_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]<TCS_AMOUNT)
					{
						_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]--;
					}
					#else
					__asm
						CLR PSW,0
						BANKSEL __KF8_LIBc_channel_
						RLCR __KF8_LIBc_channel_
						ADD R0,#(__KF8_LIBc_touch_count_+0)
						BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
						MOV __KF8_lib_Date_Uchar_Temp_SW_,R0	;// ַ

						BANKSEL __KF8_LIBc_touch_count_
						LD R1,[R0]
						XOR R1,#0x00
						JB PSW,2
						JMP Key_Down_count_Condition

						INC R0
						BANKSEL __KF8_LIBc_touch_count_
						LD R1,[R0]
						XOR R1,#0x00
						JNB PSW,2
						JMP Key_Down_Count_Sub_End		;//_KF8_LIBc_touch_count_>0


					Key_Down_count_Condition:			;//_KF8_LIBc_touch_count_<TCS_AMOUNT
						BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
						MOV R0,__KF8_lib_Date_Uchar_Temp_SW_
						BANKSEL __KF8_LIBc_touch_count_
						LD R1,[R0]
						BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						MOV __KF8_LIBi_Touch_New_Date_SW_,R1
						INC R0
						BANKSEL __KF8_LIBc_touch_count_
						LD R1,[R0]
						BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						MOV __KF8_LIBi_Touch_New_Date_SW_+1,R1	;// get _KF8_LIBc_touch_count_ to __KF8_LIBi_Touch_New_Date_SW_

						MOV R1,# high (_TCS_AMOUNT+1)
						MOV R0,# low (_TCS_AMOUNT+1)
						PAGESEL	__R2PCHPCL_SW_
						CALL	__R2PCHPCL_SW_
						PAGESEL	$
						BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						SUB R0,__KF8_LIBi_Touch_New_Date_SW_+1
						JB PSW,0	;//λλ
						JMP Key_Down_count_Sub
						JB PSW,2	;// λλʱ
						JMP Key_Down_Count_Sub_End
						MOV R1,# high (_TCS_AMOUNT+0)
						MOV R0,# low (_TCS_AMOUNT+0)
						PAGESEL	__R2PCHPCL_SW_
						CALL	__R2PCHPCL_SW_
						PAGESEL	$
						BANKSEL __KF8_LIBi_Touch_New_Date_SW_
						SUB R0,__KF8_LIBi_Touch_New_Date_SW_
						JNB PSW,0	;;//λȣλ λ
						JMP Key_Down_Count_Sub_End
				    Key_Down_count_Sub:
				    	;//_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]--
						BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
						MOV R0,__KF8_lib_Date_Uchar_Temp_SW_
						BANKSEL __KF8_LIBc_touch_count_
						LD R1,[R0]
						ADD R1,#0xFF
						ST [R0],R1
						JNB PSW,0
						JMP Key_Down_Count_Sub_End
						INC R0
						LD R1,[R0]
						DEC R1
						ST [R0],R1
					Key_Down_Count_Sub_End:
					__endasm;
					if(1);
					#endif
					/*******************************************/
				}
				__asm
				Key_Down_Deal_END:
				__endasm;
				if(1);
	   /*########################################################################################*/
		}// ͨͨķǱ
		else  // ڼ  ¼ͷŻ򰴼˲
		{
		#if 0
			if(_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]<TCS_AMOUNT)
				_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]=0;
			else
				_KF8_LIBc_touch_count_[_KF8_LIBc_channel_]=TCS_AMOUNT+1;
		#else
			__asm
			CLR PSW,0
			BANKSEL __KF8_LIBc_channel_
			RLCR __KF8_LIBc_channel_
			ADD R0,#(__KF8_LIBc_touch_count_)
			BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
			MOV __KF8_lib_Date_Uchar_Temp_SW_,R0	;// ַ

			BANKSEL __KF8_LIBc_touch_count_
			LD R1,[R0]
			BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			MOV __KF8_LIBi_Touch_New_Date_SW_,R1
			INC R0
			BANKSEL __KF8_LIBc_touch_count_
			LD R1,[R0]
			BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			MOV __KF8_LIBi_Touch_New_Date_SW_+1,R1	;;//get
			;;======
			MOV R1,# high (_TCS_AMOUNT+1)
			MOV R0,# low (_TCS_AMOUNT+1)
			PAGESEL	__R2PCHPCL_SW_
			CALL	__R2PCHPCL_SW_
			PAGESEL	$
			BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			SUB R0,__KF8_LIBi_Touch_New_Date_SW_+1
			JB PSW,0 	;//λλ
			JMP CLR_Key_Count_Do
			JB PSW,2 	;//λжϵλ
			JMP SET_Key_Count_Know_Just

			MOV R1,# high (_TCS_AMOUNT+0)
			MOV R0,# low (_TCS_AMOUNT+0)
			PAGESEL	__R2PCHPCL_SW_
			CALL	__R2PCHPCL_SW_
			PAGESEL	$
			BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			SUB R0,__KF8_LIBi_Touch_New_Date_SW_
			JNB PSW,0	;// λȣλλ
			JMP SET_Key_Count_Know_Just
		CLR_Key_Count_Do:
			;// ====ֵ==========
			BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
			MOV R0,__KF8_lib_Date_Uchar_Temp_SW_
			CLR R1
			BANKSEL __KF8_LIBc_touch_count_
			ST [R0],R1
			INC R0
			ST [R0],R1
			JMP SET_Key_Count_Know_OUT_END
		SET_Key_Count_Know_Just:
			;// =====ʶ״̬========
			MOV R1,# high (_TCS_AMOUNT+0)
			MOV R0,# low (_TCS_AMOUNT+0)
			PAGESEL	__R2PCHPCL_SW_
			CALL	__R2PCHPCL_SW_
			PAGESEL	$
			BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			MOV __KF8_LIBi_Touch_New_Date_SW_,R0

			MOV R1,# high (_TCS_AMOUNT+1)
			MOV R0,# low (_TCS_AMOUNT+1)
			PAGESEL	__R2PCHPCL_SW_
			CALL	__R2PCHPCL_SW_
			PAGESEL	$
			BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			MOV __KF8_LIBi_Touch_New_Date_SW_+1,R0

			INC __KF8_LIBi_Touch_New_Date_SW_
			JNB PSW,2
			INC __KF8_LIBi_Touch_New_Date_SW_+1
			;;==
			MOV R0,__KF8_LIBi_Touch_New_Date_SW_
			BANKSEL __KF8_lib_Date_Uchar_Temp_SW_
			MOV R1,__KF8_lib_Date_Uchar_Temp_SW_
			BANKSEL __KF8_LIBc_touch_count_
			ST [R1],R0
			INC R1
			BANKSEL __KF8_LIBi_Touch_New_Date_SW_
			MOV R0,__KF8_LIBi_Touch_New_Date_SW_+1
			BANKSEL __KF8_LIBc_touch_count_
			ST [R1],R0
		SET_Key_Count_Know_OUT_END:
			__endasm;
			if(1);
		#endif
		}
	//###########################################################################//
	}// ͨͨĴ
	__asm
	Channel_Order_Deal_END:
	__endasm;
	if(1);
//--------//******//--------------//**********//************//
}
///************************************************************************************
//*   :  void _KF8sptsw_LIBf_touch_process_()
//* : ݴ
//* ڲ: 
//*     :   
//************************************************************************************/
void _KF8spsw_LIBf_touch_process_()
{
//===============µĲݵ=============
 	//_KF8_LIBi_Touch_New_Date_=(T1H<<8)+T1L; //Ƕ
	__asm
		BANKSEL _CTCTL
		JB _CTCTL,4
		JMP USE_T1_DATE_IN
	USE_T13_DATE_IN:
		MOV R1,T1U
		BANKSEL __KF8_Touch_Bits_
		JNB 		__KF8_Touch_Bits_,5		;//	_KF8_Touch_Work_PWM_IS_16bit  bit 5
		JMP USE_16bit_END
		CLR PSW,0
		RRC R1
	USE_16bit_END:
		MOV R0,T3L
		JMP DATE_READ_IN_VAR
	USE_T1_DATE_IN:
		MOV R1,T1H
		MOV R0,T1L
	DATE_READ_IN_VAR:
		BANKSEL	__KF8_LIBi_Touch_New_Date_SW_
		MOV __KF8_LIBi_Touch_New_Date_SW_+1,R1
		MOV __KF8_LIBi_Touch_New_Date_SW_,R0
	__endasm;

#if 0
 	_KF8_LIBi_Touch_New_Date_SW_=_KF8_LIBi_Touch_New_Date_SW_>>IIR_SET;
 	_KF8_LIBi_buff_hit_[_KF8_LIBc_channel_]-=_KF8_LIBi_buff_hit_[_KF8_LIBc_channel_]>>IIR_SET;
 	_KF8_LIBi_buff_hit_[_KF8_LIBc_channel_]+=_KF8_LIBi_Touch_New_Date_SW_;
#else  // __KF8_Temp_Cur_A_SW_  __KF8_Temp_Cur_B_SW_
 	__asm
 		;;---------------------------------
 		;;==// ַ
		CLR PSW,0
		BANKSEL __KF8_LIBc_channel_
		RLCR __KF8_LIBc_channel_
		ADD R0,#(__KF8_LIBi_buff_hit_+0)
		BANKSEL _Date_Save_Buf_SW_
		MOV _Date_Save_Buf_SW_,R0	;
		;;==//
		MOV  R0,#(IIR_SET_REPAIR)
		BANKSEL __KF8_LIBi_Touch_New_Date_SW_
		ADD __KF8_LIBi_Touch_New_Date_SW_,R0
		JNB PSW,0
		INC __KF8_LIBi_Touch_New_Date_SW_+1
		;;==;//ȡIIRһ
		MOV R0,#IIR_SET
		INC R0
		JMP IIR_Deal_NEXT_1
	IIR_Deal_DO_1:
	 	CLR PSW,0
	 	RRC __KF8_LIBi_Touch_New_Date_SW_+1
	 	RRC __KF8_LIBi_Touch_New_Date_SW_
	IIR_Deal_NEXT_1:
		DECJZ R0
		JMP	IIR_Deal_DO_1
		;;-----------------------------------
		BANKSEL _Date_Save_Buf_SW_
		MOV R0,	_Date_Save_Buf_SW_
		BANKSEL __KF8_LIBi_buff_hit_
		LD R1,[R0]
		BANKSEL __KF8_Temp_Cur_A_SW_
		MOV __KF8_Temp_Cur_A_SW_,R1
		INC R0
		BANKSEL __KF8_LIBi_buff_hit_
		LD R1,[R0]
		BANKSEL __KF8_Temp_Cur_A_SW_
		MOV __KF8_Temp_Cur_A_SW_+1,R1	;//ֵ1

		BANKSEL __KF8_Temp_Cur_A_SW_
		MOV R0,__KF8_Temp_Cur_A_SW_
		BANKSEL	__KF8_Temp_Cur_B_SW_
		MOV __KF8_Temp_Cur_B_SW_,R0
		MOV __KF8_Temp_Cur_B_SW_+1,R1	;//ֵ2

		;;==//
		MOV  R0,#(IIR_SET_REPAIR)
		BANKSEL __KF8_Temp_Cur_B_SW_
		ADD __KF8_Temp_Cur_B_SW_,R0
		JNB PSW,0
		INC __KF8_Temp_Cur_B_SW_+1
		;;==;//ȡIIRһ
		MOV R0,#IIR_SET
		INC R0
		JMP IIR_Deal_NEXT_2
	IIR_Deal_DO_2:
	 	CLR PSW,0
	 	RRC __KF8_Temp_Cur_B_SW_+1
	 	RRC __KF8_Temp_Cur_B_SW_
	IIR_Deal_NEXT_2:
		DECJZ R0
		JMP	IIR_Deal_DO_2				;//2IIRһ

		MOV R0,__KF8_Temp_Cur_B_SW_
		MOV R1,__KF8_Temp_Cur_B_SW_+1
		BANKSEL __KF8_Temp_Cur_A_SW_
		SUB __KF8_Temp_Cur_A_SW_,R0
		JB PSW,0
		DEC __KF8_Temp_Cur_A_SW_+1
		SUB __KF8_Temp_Cur_A_SW_+1,R1

		BANKSEL __KF8_LIBi_Touch_New_Date_SW_
		MOV R1,__KF8_LIBi_Touch_New_Date_SW_+1
		MOV R0,__KF8_LIBi_Touch_New_Date_SW_
		BANKSEL __KF8_Temp_Cur_A_SW_
		ADD __KF8_Temp_Cur_A_SW_,R0
		JNB PSW,0
		INC R1
		ADD __KF8_Temp_Cur_A_SW_+1,R1	;//ݵĽ

		MOV R1,__KF8_Temp_Cur_A_SW_
		BANKSEL _Date_Save_Buf_SW_
		MOV R0,_Date_Save_Buf_SW_
		BANKSEL __KF8_LIBi_buff_hit_
		ST[R0],R1
		BANKSEL __KF8_Temp_Cur_A_SW_
		MOV R1,__KF8_Temp_Cur_A_SW_+1
		INC R0
		BANKSEL __KF8_LIBi_buff_hit_
		ST[R0],R1
		;;-----------------------------------
	__endasm;
	if(1);
#endif
//====================ȡ׶δ===================
      if(!_KF8_Touch_Bits_._KF8_Touch_Work_Flag)
      {
		__asm    // ȡٶȣ
		MOV R0,#0xF0
		DECJZ R0
		JMP $-1
		__endasm;

		  _KF8_LIBc_touch_count_[_KF8_LIBc_channel_]=0;	    // ϼ

		  if(_KF8_LIBc_channel_==0)
			{
			  ii_buf_SW_++;
				if(ii_buf_SW_>120) //ÿɨ1ȦһΣnȦ빤״̬
				{
					_KF8_Touch_Bits_._KF8_Touch_Work_Flag=1;  //빤״̬
					read_data_eep_tsw_();
					// жǷ״ο»棬Ϊдʼֵ׼
				//#######################################################
				#if 0
					for(ii_buf_SW_=0;ii_buf_SW_<CHS_AMOUNT;ii_buf_SW_++)
					{
						eeprom_data_SW_= Arr_erom_SW_[ii_buf_SW_*2+1];
						eeprom_data_SW_<<= 8;
						eeprom_data_SW_+=Arr_erom_SW_[ii_buf_SW_*2];
						_KF8_LIBi_buff_refline_[ii_buf_SW_]=eeprom_data_SW_;  // ٶΪοް

						if(eeprom_data_SW_== 0Xffff)
						{
							// first run  ,save ref
							_KF8_Touch_Bits_._KF8_Touch_Need_Save_Flag=1;
						}
					}
				#else
					__asm
					BANKSEL _ii_buf_SW_
					CLR _ii_buf_SW_
				FOR_NEXT_DO_1:
					MOV R1,# high (_CHS_AMOUNT+0)
					MOV R0,# low (_CHS_AMOUNT+0)
					PAGESEL	__R2PCHPCL_SW_
					CALL	__R2PCHPCL_SW_
					PAGESEL	$
					BANKSEL _ii_buf_SW_
					MOV R1,_ii_buf_SW_
					SUB R0,R1	;//ȥǰŵǰ
					JNB PSW,0   ;//ii_buf_SW_-CHS_AMOUNT λ     ii_buf_SW_<CHS_AMOUNT
					JMP FOR_NEXT_DO_1_End
					;///////////////===============================
					CLR PSW,0
					RLC R1	;//ii_buf_SW_*2
					ADD R1,#(_Arr_erom_SW_+1)
					BANKSEL _Arr_erom_SW_
					LD  R0,[R1]
					BANKSEL _eeprom_data_SW_
					MOV (_eeprom_data_SW_+1),R0
					DEC R1
					BANKSEL _Arr_erom_SW_
					LD  R0,[R1]
					BANKSEL _eeprom_data_SW_
					MOV (_eeprom_data_SW_),R0	;////eeprom_data_SW_=Arr_erom_SW_[ii_buf_SW_*2+1]<<8+Arr_erom_SW_[ii_buf_SW_*2]
					;;--------------------
					BANKSEL _ii_buf_SW_
					MOV R1,_ii_buf_SW_
					CLR PSW,0
					RLC R1	;//ii_buf_SW_*2
					ADD R1,#__KF8_LIBi_buff_refline_
					BANKSEL	_eeprom_data_SW_
					MOV R0,_eeprom_data_SW_
					BANKSEL	__KF8_LIBi_buff_refline_
					ST [R1],R0
					BANKSEL	_eeprom_data_SW_
					MOV R0,_eeprom_data_SW_+1
					INC R1
					BANKSEL	__KF8_LIBi_buff_refline_
					ST [R1],R0					;////_KF8_LIBi_buff_refline_[ii_buf_SW_]=eeprom_data_SW_
					;;------------------
					BANKSEL	_eeprom_data_SW_
					MOV R1,_eeprom_data_SW_
					MOV R0,_eeprom_data_SW_+1
					AND R0,R1
					MOV R1,#0xFF
					XOR R0,R1
					JB PSW,2					;// if(eeprom_data_SW_== 0Xffff)
					JMP FOR_DO_1_End
					BANKSEL __KF8_Touch_Bits_
					SET __KF8_Touch_Bits_,3				;//_KF8_Touch_Bits_._KF8_Touch_Need_Save_Flag=1; bit 3
					;///////////////////========================================
				FOR_DO_1_End:
					BANKSEL _ii_buf_SW_
					INC _ii_buf_SW_
					JMP FOR_NEXT_DO_1
				FOR_NEXT_DO_1_End:
					__endasm;
					if(1);
				#endif
				//#######################################################
					if(_KF8_Touch_Bits_._KF8_Touch_Need_Save_Flag)
					{
						#if 0
						for(ii_buf_SW_=0;ii_buf_SW_<CHS_AMOUNT;ii_buf_SW_++)
						{
							Arr_erom_SW_[ii_buf_SW_*2]=_KF8_LIBi_buff_hit_[ii_buf_SW_];
							Arr_erom_SW_[ii_buf_SW_*2+1]=_KF8_LIBi_buff_hit_[ii_buf_SW_]>>8;

							_KF8_LIBi_buff_baseline_[ii_buf_SW_]=_KF8_LIBi_buff_hit_[ii_buf_SW_];
							_KF8_LIBi_buff_refline_[ii_buf_SW_]=_KF8_LIBi_buff_hit_[ii_buf_SW_];
						}
						#else
							__asm
									BANKSEL _ii_buf_SW_
									CLR _ii_buf_SW_
								FOR_NEXT_DO_2:
									MOV R1,# high (_CHS_AMOUNT+0)
									MOV R0,# low (_CHS_AMOUNT+0)
									PAGESEL	__R2PCHPCL_SW_
									CALL	__R2PCHPCL_SW_
									PAGESEL	$
									BANKSEL _ii_buf_SW_
									MOV R1,_ii_buf_SW_
									SUB R0,R1	;//ȥǰŵǰ
									JNB PSW,0   ;//ii_buf_SW_-CHS_AMOUNT λ     ii_buf_SW_<CHS_AMOUNT
									JMP FOR_NEXT_DO_2_End
									;;///////////////////////////////////
									CLR PSW,0
									BANKSEL _ii_buf_SW_
									RLCR _ii_buf_SW_
									BANKSEL	_Date_Save_Buf_SW_
									MOV _Date_Save_Buf_SW_,R0   ;// 2±ʹѰַֽ

									ADD R0,#(__KF8_LIBi_buff_hit_)
									BANKSEL __KF8_LIBi_buff_hit_
									LD	R1,[R0];;// low get	_KF8_LIBi_buff_hit_
									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_
									ADD R0,#(_Arr_erom_SW_+0)
									BANKSEL _Arr_erom_SW_
									ST [R0],R1;;//  low set	Arr_erom_SW_

									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_
									ADD R0,#(__KF8_LIBi_buff_hit_+1)
									BANKSEL __KF8_LIBi_buff_hit_
									LD	R1,[R0];;// high get	_KF8_LIBi_buff_hit_
									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_
									ADD R0,#(_Arr_erom_SW_+1)
									BANKSEL _Arr_erom_SW_
									ST [R0],R1;;//  high set	Arr_erom_SW_
									;;------------------------------------
									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_   ;// ȡ2±Ѱַ
									ADD R0,#(__KF8_LIBi_buff_hit_)
									BANKSEL __KF8_LIBi_buff_hit_
									LD	R1,[R0];;// low get	_KF8_LIBi_buff_hit_
									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_
									ADD R0,#(__KF8_LIBi_buff_baseline_+0)
									BANKSEL __KF8_LIBi_buff_baseline_
									ST [R0],R1;;//  low set	_KF8_LIBi_buff_baseline_

									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_
									ADD R0,#(__KF8_LIBi_buff_hit_+1)
									BANKSEL __KF8_LIBi_buff_hit_
									LD	R1,[R0];;// high get	_KF8_LIBi_buff_hit_
									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_
									ADD R0,#(__KF8_LIBi_buff_baseline_+1)
									BANKSEL __KF8_LIBi_buff_baseline_
									ST [R0],R1;;//  high set	_KF8_LIBi_buff_baseline_
									;;//ʵ_KF8_LIBi_buff_baseline_[ii_buf_SW_]=_KF8_LIBi_buff_hit_[ii_buf_SW_]
									;;------------------------------------
									BANKSEL _Date_Save_Buf_SW_
									MOV R0,	_Date_Save_Buf_SW_   ;// ȡ2±Ѱַ
									ADD R0,#(__KF8_LIBi_buff_hit_)
									BANKSEL __KF8_LIBi_buff_hit_
									LD	R1,[R0];;// low get	_KF8_LIBi_buff_hit_
									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_
									ADD R0,#(__KF8_LIBi_buff_refline_+0)
									BANKSEL __KF8_LIBi_buff_refline_
									ST [R0],R1;;//  low set	_KF8_LIBi_buff_refline_

									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_
									ADD R0,#(__KF8_LIBi_buff_hit_+1)
									BANKSEL __KF8_LIBi_buff_hit_
									LD	R1,[R0];;// high get	_KF8_LIBi_buff_hit_
									BANKSEL _Date_Save_Buf_SW_
									MOV R0,_Date_Save_Buf_SW_
									ADD R0,#(__KF8_LIBi_buff_refline_+1)
									BANKSEL __KF8_LIBi_buff_refline_
									ST [R0],R1;;//  high set	_KF8_LIBi_buff_refline_
									;;//_KF8_LIBi_buff_refline_[ii_buf_SW_]=_KF8_LIBi_buff_hit_[ii_buf_SW_];
									;;///////////////////////////////////
									BANKSEL _ii_buf_SW_
									INC _ii_buf_SW_
									JMP FOR_NEXT_DO_2
								FOR_NEXT_DO_2_End:
							__endasm;
								if(1);
						#endif
						write_eep_tsw_(); // д׼չϵ
					}
					else
					{
					#if 0
						_KF8_Temp_Cur_A_SW_=_KF8_LIBi_buff_hit_[_KF8_Inside_Reference_Channel_Order];
						_KF8_Temp_Cur_B_SW_=_KF8_LIBi_buff_refline_[_KF8_Inside_Reference_Channel_Order];
						_KF8_LIBi_buff_baseline_[_KF8_Inside_Reference_Channel_Order]=_KF8_Temp_Cur_B_SW_;
					#else
						__asm
						 MOV R1,# high (__KF8_Inside_Reference_Channel_Order+0)
						 MOV R0,# low (__KF8_Inside_Reference_Channel_Order+0)
						 PAGESEL	__R2PCHPCL_SW_
						 CALL	__R2PCHPCL_SW_
						 PAGESEL	$
						 CLR PSW,0
						 RLC R0
						 BANKSEL _Date_Save_Buf_SW_
						 MOV _Date_Save_Buf_SW_,R0 ;;//ƫ
						;;-------------------------------
						 ADD R0,#(__KF8_LIBi_buff_hit_+0)
						 BANKSEL __KF8_LIBi_buff_hit_
						 LD R1,[R0]  ;;// low get _KF8_LIBi_buff_hit_
						 BANKSEL __KF8_Temp_Cur_A_SW_
						 MOV __KF8_Temp_Cur_A_SW_,R1
						 INC R0
						 BANKSEL __KF8_LIBi_buff_hit_
						 LD R1,[R0]  ;;// high get _KF8_LIBi_buff_hit_
						 BANKSEL __KF8_Temp_Cur_A_SW_
						 MOV (__KF8_Temp_Cur_A_SW_+1),R1		;;//_KF8_Temp_Cur_A_SW_=_KF8_LIBi_buff_hit_[_KF8_Inside_Reference_Channel_Order]
						;;-----------------------------
						 BANKSEL _Date_Save_Buf_SW_
						 MOV R0,_Date_Save_Buf_SW_
						 ADD R0,#(__KF8_LIBi_buff_refline_+0)
						 BANKSEL __KF8_LIBi_buff_refline_
						 LD R1,[R0]  ;;// low get __KF8_LIBi_buff_refline_
						 BANKSEL __KF8_Temp_Cur_B_SW_
						 MOV __KF8_Temp_Cur_B_SW_,R1
						 INC R0
						 BANKSEL __KF8_LIBi_buff_refline_
						 LD R1,[R0]  ;;// high get __KF8_LIBi_buff_refline_
						 BANKSEL __KF8_Temp_Cur_B_SW_
						 MOV (__KF8_Temp_Cur_B_SW_+1),R1		;;//_KF8_Temp_Cur_B_SW_=_KF8_LIBi_buff_refline_[_KF8_Inside_Reference_Channel_Order]
						;;-----------------------------
						 BANKSEL _Date_Save_Buf_SW_
						 MOV R0,_Date_Save_Buf_SW_
						 ADD R0,#(__KF8_LIBi_buff_baseline_+0)
						 BANKSEL __KF8_Temp_Cur_B_SW_
						 MOV R1,__KF8_Temp_Cur_B_SW_
						 BANKSEL __KF8_LIBi_buff_baseline_
						 ST [R0],R1;// set low
						 INC R0
						 BANKSEL __KF8_Temp_Cur_B_SW_
						 MOV R1,__KF8_Temp_Cur_B_SW_+1
						 BANKSEL __KF8_LIBi_buff_baseline_
						 ST [R0],R1;// set high					;;//_KF8_LIBi_buff_baseline_[_KF8_Inside_Reference_Channel_Order]=_KF8_Temp_Cur_B_SW_;
						 __endasm;
					#endif

					 _KF8spsw_Lib_DateChange_get_();
					//ͨĲοֵ
					 _KF8spsw_Lib_BaseLine_Reget_();
					}
				}
			}
      }
      //еĴ
      else
      {
    	  _KF8spsw_LIBf_scan_channel_(); //ɨADͨ,仯ʣ仯ͳ
      }
   	//-------------------һҪɨͨλ
	#if  0
      	  _KF8_LIBc_channel_++;
   	     if(_KF8_LIBc_channel_ ==CHS_AMOUNT)
   	     {
   	    	_KF8_LIBc_channel_ = 0;
   	     }
	#else
  	     __asm
			 MOV R1,# high (_CHS_AMOUNT+0)
			 MOV R0,# low (_CHS_AMOUNT+0)
			 PAGESEL	__R2PCHPCL_SW_
			 CALL	__R2PCHPCL_SW_
			 PAGESEL	$
			 BANKSEL __KF8_LIBc_channel_
			 INC __KF8_LIBc_channel_
			 XOR R0,__KF8_LIBc_channel_
			 JNB PSW,2
			 CLR __KF8_LIBc_channel_
		__endasm;
	#endif

   	//------------------һͨɨʹ
	#if 0
  		if(CTCTL&0x10)
  		{
  			T3L=0;
  		}
  		else
  		{
  			T1L=0x00;T1H=0x00;T1IF=0;
  		}
  		CTCTL = _KF8_TOUCH_CH_EN[_KF8_LIBc_channel_]|0x80;	// ѡţǶʵ
  		_NOP_();_NOP_();_NOP_();_NOP_();
  		CTCTL|=0x40;
  		if(CTCTL&0x10)
  		{
  			T1U=0;
  		}
	#else
  		__asm
  		BANKSEL _CTCTL
  		JNB _CTCTL,4
  		JMP USE_T3L_COUNT_FLAG
  		CLR _T1L
  		CLR _T1H
  		CLR EIF1,_T1IF
  		JMP START_CT_DO
  	USE_T3L_COUNT_FLAG:
  		CLR _T3L
  	START_CT_DO:
  		BANKSEL __KF8_LIBc_channel_
  		MOV R0, __KF8_LIBc_channel_
		ADD R0, # low  (__KF8_TOUCH_CH_EN+0)
		MOV R1, # high (__KF8_TOUCH_CH_EN+0)
		JNB _PSW,0
		INC R1
		PAGESEL	__R2PCHPCL_SW_
		CALL	__R2PCHPCL_SW_
		PAGESEL	$

		MOV R1,#0xF0
		BANKSEL _CTCTL
		AND _CTCTL,R1		;//4λͨ
		ORL _CTCTL,R0

		MOV R0,#0x01
		DECJZ R0
		JMP $-1

		SET _CTCTL,6	;// CTSTART
		NOP
		JB _CTCTL,6
		JMP $-3
  	START_CT_END_DO:
		BANKSEL _CTCTL
		JNB _CTCTL,4
		CLR _T1U

  		__endasm;

	#endif
  	     //-------------------------
}//
///************************************************************************************
//*   :  void _KF8spsw_Get_Ver_WaterLevel_()
//* : ȡǰİ汾
//* ڲ: 
//*     :   
//************************************************************************************/
unsigned char _KF8spsw_Get_Ver_WaterLevel_()
{
	return Ver_SP_T_W;
}
